zoukankan      html  css  js  c++  java
  • java servlet上传文件并把文件内容显示在网页中

    servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象。下面我实现了文件的上传以及将上传的文件显示在网页上(主要目的是实现本地文件在网页上的显示,我采取了先上传文件,在读取上传的文件,将读取的内容显示在网页上)。

    Java代码实现:

      1 package FileUpload.servlet;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.File;
      5 import java.io.FileReader;
      6 import java.io.IOException;
      7 import java.io.PrintWriter;
      8 
      9 import javax.servlet.ServletException;
     10 import javax.servlet.annotation.*;
     11 import javax.servlet.http.HttpServlet;
     12 import javax.servlet.http.HttpServletRequest;
     13 import javax.servlet.http.HttpServletResponse;
     14 import javax.servlet.http.Part;
     15 
     16 /**
     17  * Servlet implementation class FileUploadServlet
     18  */
     19 //上传文件被保存的路径
     20 @MultipartConfig(
     21         location="E:\eclipse\workspace\TestAceEditor\FileUpload"
     22         )
     23 @WebServlet(urlPatterns={"/fileUpload"})
     24 
     25 public class FileUploadServlet extends HttpServlet {
     26     private static final long serialVersionUID = 1L;
     27     //private static final Log log = LogFactory.getLog(UploadFileAction.class);
     28     //private String fileNameExtractorRegex = "filename=".+"";
     29     
     30     /**
     31      * @see HttpServlet#HttpServlet()
     32      */
     33     public FileUploadServlet() {
     34         super();
     35         // TODO Auto-generated constructor stub
     36     }
     37 
     38     //获得指定文件的内容
     39     private String getFileContent(String fileName){
     40         File file = new File(fileName);
     41         BufferedReader reader = null;
     42         String ans = "";
     43         try{
     44             reader = new BufferedReader(new FileReader(file));
     45             String tmpString = null;
     46             //一行一行的读取文件里面的内容
     47             while((tmpString = reader.readLine()) != null){
     48                 ans += tmpString + "
    ";//保存在ans里面
     49             }
     50         }catch(IOException e){
     51             e.printStackTrace();
     52         }finally{
     53             if(reader != null)
     54             {
     55                 try{
     56                     reader.close();
     57                 }catch(IOException e1){
     58                     e1.printStackTrace();
     59                 }
     60             }
     61         }
     62         //返回获得的文件内容
     63         return ans;
     64     }
     65     //获得上传文件的文件名
     66     private String getFilename(Part part){
     67         
     68         if(part == null){
     69             return null;
     70         }
     71         //获得文件名的方法是根据一本书上的代码来的,忘记书名了,以后补上
     72         String contentDispositionHeader = part.getHeader("content-disposition");
     73         
     74         String fileName = null;
     75         String[] elements = contentDispositionHeader.split(";");
     76         for(String element:elements){
     77             if(element.trim().startsWith("filename")){
     78                 fileName = element.substring(element.indexOf('=') + 1).trim().replace(""", "");
     79                 break;
     80             }
     81         }
     82         fileName = fileName.substring(fileName.lastIndexOf('\') + 1);
     83 //        Pattern pattern = Pattern.compile(fileNameExtractorRegex);  
     84 //        Matcher matcher = pattern.matcher(contentDispositionHeader); 
     85 //        String fileName = null;
     86 //        if(matcher.find()){  
     87 //            fileName = matcher.group();  
     88 //            fileName = fileName.substring(10, fileName.length()-1);  
     89 //        }  
     90         
     91         return fileName;
     92     }
     93     
     94     /**
     95      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     96      */
     97     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     98         // TODO Auto-generated method stub
     99         request.getRequestDispatcher("fileUpload.jsp").forward(request, response);
    100     }
    101 
    102     /**
    103      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    104      */
    105     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    106         // TODO Auto-generated method stub
    107         //set the encoding
    108         request.setCharacterEncoding("UTF-8");
    109         
    110         //请求(form中为file类型的输入框的名字为filename)发送过来时,使用getPart()方法取得Part实现对象
    111         Part part = request.getPart("filename");
    112         String fileName = getFilename(part);
    113         
    114         
    115         if(fileName != null && !fileName.isEmpty()){
    116             part.write(fileName);
    117         }
    118         
    119         //从指定文件路径获得文件内容
    120         String filePath = "E:\eclipse\workspace\TestAceEditor\FileUpload" + "\" + fileName;
    121         String fileContent = getFileContent(filePath);
    122         
    123         //write to browser
    124 //        response.setContentType("text/html");
    125 //        PrintWriter writer = response.getWriter();
    126 //        writer.print("<br/>Uploaded file name: "+ fileName);
    127 //        writer.print("<br/>Size: "+part.getSize());
    128 //        
    129 //        String author = request.getParameter("author");
    130 //        writer.print("<br/>Author: "+author);
    131         //设置属性,在jsp文件中可以使用EL获得fileContent对象里的内容
    132         request.setAttribute("fileContent", fileContent);
    133         request.getRequestDispatcher("fileUpload.jsp").forward(request, response);
    134         
    135     }
    136 
    137 }
    View Code

    jsp代码如下:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>fileupload</title>
     8 
     9 <style type="text/css" media="screen">
    10     body {
    11         overflow: hidden;
    12     }
    13     
    14     #editor { 
    15         margin: 0;
    16         position: absolute;
    17         top: 130px;
    18         bottom: 0;
    19         left: 0;
    20         right: 0;
    21     }
    22  </style>
    23  
    24 </head>
    25 
    26 <body>
    27 
    28 <div style="margin:left">
    29 <h1>editor my code</h1>
    30 </div>
    31 
    32 <div style="background:#BFEFFF">
    33 <form action="fileUpload" enctype="multipart/form-data" method="post">
    34 Select file to show <input type="file" name="filename"/>
    35 <input type="submit" value="Show"/>
    36 </form>
    37 </div>
    38 
    39 <div id="editor">
    40 <!-- show the content in the uploading file -->
    41 ${fileContent}
    42 </div>
    43 
    44 </body>
    45 </html>
    View Code

    上传效果如下:

    不用管里面说的图2(其实就是Java代码中说的MultipartConfig中的location),我把之前写文档的截图直接拿过来~

    注意编码,统一utf-8吧,包括上传的文件的编码。

  • 相关阅读:
    POJ 1815 求最小点割(拆点+枚举割边)
    POJ 2391 floyd + 拆点构图 + 二分 + 最大流
    POJ 1966 去掉最少的点使得图不连通(最小点割)
    sgu 194 无源汇的上下界可行流
    POJ 2396 有源汇的上下界可行流(好题)
    DIV水平垂直居中
    The Struts dispatcher cannot be found
    Introduction to 3D Game Programming with Direct X 9.0c读书笔记(1)
    Chapter 5Looking Through a Filter(如何将纹理坐标变换到屏幕坐标)
    Chapter 6Blurring Things Up之Do It Twice
  • 原文地址:https://www.cnblogs.com/Shirlies/p/4135311.html
Copyright © 2011-2022 走看看