servlet實現文件上傳,預覽,下載和刪除

1、準備工做

  1.1 文件上傳插件:uploadify;javascript

  1.2 文件上傳所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jarcss

  1.3 將數據轉成JSON對象須要jar包:commons-beanutils-1.8.3.jar、commons-collections-3.2.1.jar、commons-lang-2.6.jar、commons-logging-1.1.3.jar、ezmorph-1.0.6.jar和json-lib-2.4-jdk15.jarhtml

  1.4 開發工具:我用的是Eclipse,隨意java

  1.5 目錄結構jquery

  須要注意的是:變動uploadify.css文件中的取消文件上傳圖片的路徑linux

.uploadify-queue-item .cancel a {
    background: url('../images/uploadify-cancel.png') 0 0 no-repeat;
    float: right;
    height:    16px;
    text-indent: -9999px;
    width: 16px;
} 

2、代碼展現

  2.1 客戶端代碼設計web

  JSP部分apache

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 3 <html>
 4     <head>  
 5         <title>演示-操做文件</title>
 6         <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 7         <script type="text/javascript" src="<c:url value="/js/jquery-1.11.2.min.js"/>"></script>
 8         <script type="text/javascript" src="<c:url value="/uploadify/js/jquery.uploadify-3.2.1.min.js"/>"></script>
 9         <link href="<c:url value="/uploadify/css/uploadify.css"/>" type="text/css" rel="stylesheet"/>
10         <script type="text/javascript">var baseUrl = '<%=request.getContextPath()%>';</script>
11         <script type="text/javascript" src="<c:url value="/index.js"/>"></script>
12         <style type="text/css">
13             /* 上傳、取消上傳按鈕style start */
14             .Button {
15                 width: 80px;
16                 margin: 3px 1px 0 5px;
17                 padding: 0 10px;
18                 background-color: #16a0d3;
19                 border: none;
20                 display: inline-block;
21                 font-family: "Microsoft Yahei";
22                 font-size: 14px;
23                 cursor: pointer;
24                 height: 30px;
25                 line-height: 30px;
26                 color: #FFF;
27                 border-radius: 5px;
28                 text-decoration:none;
29                 text-align:center;
30             }
31             
32             .ButtonOver {
33                 width: 80px;
34                 margin: 3px 1px 0 5px;
35                 padding: 0 10px;
36                 background-color: #117ea6;
37                 border: none;
38                 display: inline-block;
39                 font-family: "Microsoft Yahei";
40                 font-size: 14px;
41                 cursor: pointer;
42                 height: 30px;
43                 line-height: 30px;
44                 color: #FFF;
45                 border-radius: 5px;
46                 text-decoration:none;
47                 text-align:center;
48             }    
49             /* end 上傳、取消上傳按鈕style */
50         </style>
51     </head>
52     <body>
53         <!-- 文件上傳 -->
54         <div id="file_upload"></div>
55         <div id="ctrlUpload" style="display:none;">
56             <a href="javascript:;" onclick="$('#file_upload').uploadify('upload', '*');" class="Button" 
57                 onmouseover="javascript:this.className='ButtonOver'" onmouseout="javascript:this.className='Button'">
58                         上傳全部
59             </a>    
60             <a href="javascript:;" onclick="$('#file_upload').uploadify('cancel', '*');$('#ctrlUpload').hide();" class="Button"
61                 onmouseover="javascript:this.className='ButtonOver'" onmouseout="javascript:this.className='Button'">
62                         取消上傳
63             </a>    
64         </div>
65         <table border=1 style="border-collapse: collapse;" id="tableFiles">
66             <thead>
67                 <th>序號</th>
68                 <th>文件名</th>
69                 <th>文件預覽</th>
70                 <th>文件下載</th>
71                 <th>文件刪除</th>
72             </thead>
73             <tbody></tbody>
74         </table>
75     </body>
76 </html>
View Code 

  js文件json

 1 var operateFile = new OperateFile();
 2 window.onload = function() {
 3     operateFile.init();
 4     
 5 }
 6 
 7 /**
 8  * 對文件進行操做
 9  * @returns
10  */
11 function OperateFile() {
12     var object = this;
13     
14     /**
15      * 初始化操做:
16      */
17     this.init = function() {
18         // 隊列中的文件數
19         var selectedCount = 0;
20         $('#file_upload').uploadify({
21             'method' : 'get',// 默認值post,設置成get是爲了向後臺傳遞自定義的參數
22             'auto' : false,// 設置爲true當選擇文件後就直接上傳了,爲false須要點擊上傳按鈕才上傳。默認值爲TRUE
23             'buttonText' : '添加文件',// 按鈕文本
24             'fileTypeExts' : '*.gif; *.jpg; *.png;*.pdf;*.zip;',// 限制上傳文件類型,默認值沒有限制(*.*)
25             'fileTypeDesc' : '請選擇gif jpg png pdf zip類型的文件',// 這個屬性值必須設置fileTypeExts屬性後纔有效,用來設置選擇文件對話框中的提示文本,默認值:All Files
26             'swf' : baseUrl + '/uploadify/flash/uploadify.swf', // flash文件路徑(幫助咱們與後端交互數據)
27             'uploader' : baseUrl + '/uploadFile.do' , // 處理文件上傳請求地址 
28             'formData' : {'param1':'測試文件上傳'},// 請求參數:上傳每一個文件的同時提交到服務器的額外數據
29             'onDialogClose' : function(queueData) {
30                 // 獲取該隊列中有多少個要上傳的文件 
31                 var queueSize = $('#file_upload-queue').children('div').length;
32                 if (queueSize > 0) {
33                     $('#ctrlUpload').show();
34                 }
35             },
36             'onUploadSuccess' : function(file, data, response) {// 上傳成功
37                 // 將josn字符串轉換成JSON對象
38                 data = eval('(' + data + ')');
39                 // 獲取頁面上文件展現table 有多少行
40                 var rowsLength = $('#tableFiles')[0].rows.length;
41                 // 設置查看文件所需參數
42                 var param = "fileName=" + data.fileName;
43                 // 查看文件請求地址
44                 var viewUrl = baseUrl + '/viewFile.do?' + param;
45                 // 下載文件請求地址
46                 var downloadUrl = baseUrl + '/downloadFile.do?' + param;
47                 
48                 // 拼接一行tr
49                 var trTemplate = '<tr>'
50                                 +    '<td>'
51                                 +        rowsLength     
52                                 +    '</td>'
53                                 +   '<td>'
54                                 +        file.name // 仍展現原文件名
55                                 +    '</td>'
56                                 +   '<td>'
57                                 +        '<a href="' + viewUrl + '" target="_blank">點擊預覽</a>'
58                                 +        '<input type="hidden" name="imgAddress" value="' + data.fileName + '"/>'
59                                 +    '</td>'
60                                 +   '<td>'
61                                 +        '<a href="' + downloadUrl + '">點擊下載</a>'
62                                 +    '</td>'
63                                 +   '<td>'
64                                 +        '<a href="javascript:;" onclick="operateFile.deleteFile(\'' + data.fileName + '\',' + rowsLength +');">點擊刪除</a>'
65                                 +    '</td>'
66                                 +'</tr>';
67                 $('#tableFiles').append(trTemplate);
68             },
69             'onUploadError' : function(file, errorCode, errorMsg, errorString) {// 上傳失敗
70                 
71             }
72         });
73         
74     }
75     
76     /**
77      * 刪除文件
78      * @param 文件名
79      */
80     this.deleteFile = function(fileName,rowIndex) {
81         // 設置刪除文件所需參數
82         var param = "fileName=" + fileName;
83         // 刪除文件請求地址
84         var deleteUrl = baseUrl + '/deleteFile.do?' + param;
85         $.get(
86             deleteUrl, 
87             function(msg) {
88                 alert(msg);
89                 if ("刪除失敗!" != msg) {
90                     // 刪除該行記錄
91                     $('#tableFiles')[0].deleteRow(rowIndex);
92                 }
93             }
94         );
95         
96     }
97     
98 } 
View Code

  2.2 服務器端代碼設計後端

  文件上傳代碼(FileUpload.java文件)

  1 package controller.fileHandler;
  2 
  3 import java.io.File;
  4 import java.io.IOException;
  5 import java.io.PrintWriter;
  6 import java.util.HashMap;
  7 import java.util.Iterator;
  8 import java.util.List;
  9 import java.util.Map;
 10 import javax.servlet.ServletContext;
 11 import javax.servlet.ServletException;
 12 import javax.servlet.http.HttpServlet;
 13 import javax.servlet.http.HttpServletRequest;
 14 import javax.servlet.http.HttpServletResponse;
 15 import org.apache.commons.fileupload.FileItem;
 16 import org.apache.commons.fileupload.FileUploadException;
 17 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 18 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 19 import net.sf.json.JSONObject;
 20 
 21 public class FileUpload extends HttpServlet {
 22     private static final long serialVersionUID = 1L;
 23 
 24     protected void doGet(HttpServletRequest request, HttpServletResponse response)
 25             throws ServletException, IOException {
 26         this.doPost(request, response);
 27     }
 28 
 29     /**
 30      * 處理文件上傳的post
 31      * @precaution 下方的類名出自包import org.apache.commons.fileupload.*
 32      */
 33     protected void doPost(HttpServletRequest request, HttpServletResponse response)
 34             throws ServletException, IOException {
 35         // 1.設置參數編碼
 36         request.setCharacterEncoding("UTF-8");
 37         // 設置響應數據字符集
 38         response.setCharacterEncoding("UTF-8");
 39         // 設置響應數據格式
 40         // response.setContentType("application/json; charset=UTF-8");
 41         PrintWriter out = response.getWriter();
 42         // 2.建立文件上傳處理工廠
 43         DiskFileItemFactory factory = new DiskFileItemFactory();
 44         // 3.設置臨時文件存放地點
 45         // 3.1獲取當前web應用程序對象(WEB容器在啓動時,它會爲每一個WEB應用程序都建立一個對應的ServletContext對象,它表明當前web應用)
 46         ServletContext servletContext = this.getServletConfig().getServletContext();
 47         // 3.2獲取服務器的臨時目錄(tomcat、WebLogic)
 48         // D:\ProgramFiles(x86)\APACHE\TOMCAT\apache-tomcat-7.0.40-x86\work\Catalina\localhost\demo
 49         File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
 50         // 3.3臨時文件將會存儲在該目錄下
 51         factory.setRepository(repository);
 52         // 4.建立文件上傳處理器
 53         ServletFileUpload upload = new ServletFileUpload(factory);
 54         // 5.判斷請求類型是否爲文件上傳類型
 55         boolean multipartContent = upload.isMultipartContent(request);
 56 
 57         Map<String, String> mapData = new HashMap<String, String>();
 58         // 返回信息
 59         String msg = "";
 60         // 錯誤信息
 61         String errorMsg = "";
 62         // 文件名
 63         String fileName = "";
 64         if (multipartContent) {
 65             try {
 66                 // 獲取請求參數
 67                 String param = request.getParameter("param1");
 68                 System.out.println(param);
 69                 // 6.解析請求信息
 70                 List<FileItem> items = upload.parseRequest(request);
 71 
 72                 // 7.對全部請求信息進行判斷
 73                 Iterator<FileItem> iter = items.iterator();
 74                 while (iter.hasNext()) {
 75                     FileItem item = iter.next();
 76                     // 信息爲文件格式
 77                     if (!item.isFormField()) {
 78                         fileName = processUploadedFile(param, item);
 79                         msg = "上傳成功!";
 80                     }
 81                 }
 82             } catch (FileUploadException e) {
 83                 e.printStackTrace();
 84                 msg = "上傳失敗!";
 85                 errorMsg = e.getMessage();
 86             }
 87 
 88         } else {
 89             msg = "form表單類型不是multipart/form-data,沒法上傳!";
 90         }
 91 
 92         mapData.put("msg", msg);
 93         mapData.put("errorMsg", errorMsg);
 94         mapData.put("fileName", fileName);
 95         // 將Map轉成JSON
 96         JSONObject jsonData = JSONObject.fromObject(mapData);
 97         // 返回客戶端信息
 98         out.print(jsonData.toString());
 99     }
100 
101     /**
102      * 處理上傳的文件
103      * @param ORG_ID
104      * @param order
105      * @param item
106      */
107     @SuppressWarnings("unused")
108     private String processUploadedFile(String param, FileItem item) {
109         // Process a file upload
110         String fieldName = item.getFieldName();// 默認值爲Filedata
111         // 獲取文件名
112         String fileName = item.getName();
113         // 內容類型:application/octet-stream
114         String contentType = item.getContentType();
115         boolean isInMemory = item.isInMemory();
116         // 獲取文件大小
117         long sizeInBytes = item.getSize();
118         // 1.指定文件上傳的根路徑
119         String path = this.getServletContext().getRealPath("/WEB-INF/uploadFiles");
120         // 2.路徑構成:/uploadfile/fileName
121         // TODO 能夠自定義文件存放路徑
122         // 3.根據路徑批量建立文件夾
123         File fileDirectories = new File(path);
124         // 目錄不存在時,再建立
125         if (!fileDirectories.exists()) {
126             fileDirectories.mkdirs();// 全部的文件夾都建立成功才返回TRUE
127         }
128         // 4.文件名格式校驗(文件名中不能包含#號)
129         int index = fileName.indexOf("#");
130         if (index > -1) {
131             fileName = fileName.replace('#', '_');
132         }
133         // TODO 能夠對文件名進行重命名
134         // 5.在指定路徑下建立指定名稱的文件
135         File uploadedFile = new File(path + "/" + fileName);
136         // 6.判斷該文件是否已存在
137         if (!uploadedFile.exists()) {
138             try {
139                 // 使用了這個方法寫入文件,臨時文件會被系統自動刪除
140                 item.write(uploadedFile);
141             } catch (Exception e) {
142                 e.printStackTrace();
143             }
144         }
145         // 返回重名後的文件名
146         return fileName;
147     }
148 
149     /**
150      * 處理信息爲普通的格式
151      * @param item
152      */
153     private void processFormField(FileItem item) {
154         // Process a regular form field
155         if (item.isFormField()) {
156             String name = item.getFieldName();
157             String value = item.getString();
158         }
159     }
160 }
View Code

  文件查看代碼(FileView.java文件)

 1 package controller.fileHandler;
 2 
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.FileInputStream;
 6 import java.io.IOException;
 7 import java.io.InputStream;
 8 import java.io.OutputStream;
 9 import javax.servlet.ServletContext;
10 import javax.servlet.ServletException;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 
15 public class FileView extends HttpServlet {
16     private static final long serialVersionUID = 1L;
17 
18     // 設定輸出的類型
19     private static final String GIF = "image/gif;charset=UTF-8";
20     private static final String JPG = "image/jpeg;charset=UTF-8";
21     private static final String PNG = "image/png;charset=UTF-8";
22     private static final String PDF = "application/pdf;charset=UTF-8";
23     private static final String ZIP = "application/zip;charset=UTF-8";
24 
25     protected void doGet(HttpServletRequest request, HttpServletResponse response)
26             throws ServletException, IOException {
27         this.doPost(request, response);
28     }
29 
30     /**
31      * 處理文件查看的post
32      * @throws IOException
33      * @precaution 下方的類名出自包import org.apache.commons.fileupload.*
34      */
35     protected void doPost(HttpServletRequest request, HttpServletResponse response)
36             throws ServletException, IOException {
37         // 文件流
38         InputStream is = null;
39         // 輸入緩衝流
40         BufferedInputStream bis = null;
41         // 獲得輸出流
42         OutputStream output = null;
43         // 輸出緩衝流
44         BufferedOutputStream bos = null;
45         // 1.設置參數編碼
46         request.setCharacterEncoding("UTF-8");
47         // 2.設置響應數據字符集
48         response.setCharacterEncoding("UTF-8");
49         // 3.獲取客戶端請求參數:文件名
50         String fileName = request.getParameter("fileName");
51         // 4.重置response
52         response.reset();
53         // 5.設置響應數據格式
54         if (fileName.endsWith(".gif")) {
55             response.setContentType(GIF);
56         } else if (fileName.endsWith(".jpg")) {
57             response.setContentType(JPG);
58         } else if (fileName.endsWith(".png")) {
59             response.setContentType(PNG);
60         } else if (fileName.endsWith(".pdf")) {
61             response.setContentType(PDF);
62         } else if (fileName.endsWith(".gif")) {
63             response.setContentType(GIF);
64         } else if (fileName.endsWith(".zip")) {
65             response.setContentType(ZIP);
66         }
67 
68         String filePath = "WEB-INF/uploadFiles/" + fileName;
69         // 獲取當前web應用程序
70         ServletContext webApp = this.getServletContext();
71         // 6.獲取指定文件上傳的真實路徑
72         filePath = webApp.getRealPath(filePath);
73         // 7.讀取目標文件,經過response將目標文件寫到客戶端
74         is = new FileInputStream(filePath);
75         bis = new BufferedInputStream(is);
76         output = response.getOutputStream();
77         bos = new BufferedOutputStream(output);
78         byte data[] = new byte[1024];// 緩衝字節數
79         int size = bis.read(data);
80         while (size != -1) {
81             bos.write(data, 0, size);
82             size = bis.read(data);
83         }
84 
85         // 關閉流
86         bis.close();
87         bos.flush();// 清空輸出緩衝流
88         bos.close();
89         output.close();
90     }
91 
92 }
View Code

  文件下載代碼(FileDownload.java文件)

 1 package controller.fileHandler;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.OutputStream;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 public class FileDownload extends HttpServlet {
13     private static final long serialVersionUID = 1L;
14 
15     protected void doGet(HttpServletRequest request, HttpServletResponse response)
16             throws ServletException, IOException {
17         this.doPost(request, response);
18     }
19 
20     /**
21      * 處理文件下載的post
22      * @throws IOException
23      */
24     protected void doPost(HttpServletRequest request, HttpServletResponse response)
25             throws ServletException, IOException {
26         // 1.設置參數編碼
27         request.setCharacterEncoding("UTF-8");
28         // 設置響應數據字符集
29         response.setCharacterEncoding("UTF-8");
30         // 1.得到請求文件名
31         String fileName = request.getParameter("fileName");
32         // 2.設置文件MIME類型(指定要返回內容的類型)
33         response.setContentType(getServletContext().getMimeType(fileName));
34         // 3.設置Content-Disposition(指定下載該文件時的文件名)
35         response.setHeader("content-disposition", "attachment;filename=" + fileName);
36         // 4.讀取目標文件,經過response將目標文件寫到客戶端
37         // 4.1 獲取目標文件的絕對路徑
38         String filePath = "WEB-INF/uploadFiles/" + fileName;
39         filePath = this.getServletContext().getRealPath(filePath);
40         // 4.2 讀取文件
41         InputStream in = new FileInputStream(filePath);
42         // 4.3 輸出文件
43         OutputStream out = response.getOutputStream();
44         // 寫文件
45         int n;
46         while ((n = in.read()) != -1) {
47             out.write(n);
48         }
49 
50         in.close();
51         out.close();
52     }
53 
54 }
View Code

  文件刪除代碼(FileDelete.java文件)

 1 package controller.fileHandler;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.OutputStream;
 8 import javax.servlet.ServletException;
 9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 
13 public class FileDelete extends HttpServlet {
14     private static final long serialVersionUID = 1L;
15 
16     protected void doGet(HttpServletRequest request, HttpServletResponse response)
17             throws ServletException, IOException {
18         this.doPost(request, response);
19     }
20 
21     /**
22      * 處理文件下載的post
23      * @throws IOException
24      */
25     protected void doPost(HttpServletRequest request, HttpServletResponse response)
26             throws ServletException, IOException {
27         // 1.設置參數編碼
28         request.setCharacterEncoding("UTF-8");
29         // 設置響應數據字符集
30         response.setCharacterEncoding("UTF-8");
31         // 2.得到請求文件名
32         String fileName = request.getParameter("fileName");
33         // 3.獲取該文件所在路徑
34         String filePath = "WEB-INF/uploadFiles/" + fileName;
35         filePath = this.getServletContext().getRealPath(filePath);
36         // 4.在指定路徑下建立指定名稱的文件
37         File deleteFile = new File(filePath);
38         boolean flag = false;
39         String msg = "";
40         // 5.判斷該文件是否已存在
41         if (deleteFile.exists()) {
42             flag = deleteFile.delete();
43             if (flag) {
44                 msg = "刪除成功!";
45             } else {
46                 msg = "刪除失敗!";
47             }
48         } else {
49             msg = "該文件不存在!";
50         }
51 
52         // 6.返回客戶端操做信息
53         response.getWriter().print(msg);
54     }
55 
56 }
View Code

  web.xml代碼

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 3   <display-name>demo_uploadAndDownload</display-name>
 4     <context-param>
 5         <param-name>webAppRootKey</param-name>
 6         <param-value>uploadAndDownload</param-value>
 7     </context-param>
 8     <!-- 處理文件的Servlet -->
 9     <!-- 文件上傳 Start -->
10     <servlet>
11         <servlet-name>upload</servlet-name>
12         <!-- 配置處理文件上傳的java類 -->
13         <servlet-class>controller.fileHandler.FileUpload</servlet-class>
14     </servlet>
15     <servlet-mapping>
16         <servlet-name>upload</servlet-name>
17         <!-- 設置文件上傳請求路徑 -->
18         <url-pattern>/uploadFile.do</url-pattern>
19     </servlet-mapping>
20     <!-- End 文件上傳 -->
21     <!-- 文件預覽 Start -->
22     <servlet>
23         <servlet-name>view</servlet-name>
24         <!-- 配置處理文件預覽的java類 -->
25         <servlet-class>controller.fileHandler.FileView</servlet-class>
26     </servlet>
27     <servlet-mapping>
28         <servlet-name>view</servlet-name>
29         <!-- 設置文件預覽請求路徑 -->
30         <url-pattern>/viewFile.do</url-pattern>
31     </servlet-mapping>
32     <!-- End 文件預覽 -->
33     <!-- 文件下載 Start -->
34     <servlet>
35         <servlet-name>download</servlet-name>
36         <!-- 配置處理文件下載的java類 -->
37         <servlet-class>controller.fileHandler.FileDownload</servlet-class>
38     </servlet>
39     <servlet-mapping>
40         <servlet-name>download</servlet-name>
41         <!-- 設置文件下載請求路徑 -->
42         <url-pattern>/downloadFile.do</url-pattern>
43     </servlet-mapping>
44     <!-- End 文件下載 -->
45     <!-- 文件刪除 Start -->
46     <servlet>
47         <servlet-name>delete</servlet-name>
48         <!-- 配置處理文件刪除的java類 -->
49         <servlet-class>controller.fileHandler.FileDelete</servlet-class>
50     </servlet>
51     <servlet-mapping>
52         <servlet-name>delete</servlet-name>
53         <!-- 設置文件刪除請求路徑 -->
54         <url-pattern>/deleteFile</url-pattern>
55     </servlet-mapping>
56     <!-- End 文件刪除 -->
57     <welcome-file-list>
58         <welcome-file>index.html</welcome-file>
59         <welcome-file>index.htm</welcome-file>
60         <welcome-file>index.jsp</welcome-file>
61         <welcome-file>default.html</welcome-file>
62         <welcome-file>default.htm</welcome-file>
63         <welcome-file>default.jsp</welcome-file>
64     </welcome-file-list>
65 </web-app>
View Code

 

  2.3 代碼優化 

  處理文件查看(FileView.java) ,設置響應文件類型,能夠用下面這句話替換

response.setContentType(getServletContext().getMimeType(fileName) + ";charset=UTF-8"); 

3、效果展現

 

4、更新日誌

UpdateTime--2017年10月30日17:39:56

Version:2.0

1.支持文件名是中文的文件的上傳和下載;

2.將文件的上傳和展現功能拆開;

3.文件說明

index.jsp

功能:上傳文件

優勢:雙擊選中要上傳的文件後,會自動將數據傳至後臺

缺點:一錘子買賣,沒有反悔的餘地,沒法撤銷

index2.jsp

功能:上傳文件

優勢:能夠在肯定要上傳的文件後,再上傳

缺點:須要手動點擊上傳按鈕,數據纔會傳至後臺

index2_bak.jsp和index2.jsp工功能一致,區別在於index2.jsp將上傳和展現功能拆開了

fileList.jsp

功能:上傳文件以table表格的形式展現

Version:3.0

1.公共引用內容抽出來;

2.web.xml中再也不配置控制器,使用註解實現。

2018/11/28

version:4.0

1.代碼優化,將不支持在線預覽的文件格式給予友好提示;

2.根據文件類型,動態設置響應類型;

3.解決linux環境下,根據路徑建立文件失敗BUG修復;

4.解決火狐瀏覽器下,文件下載時,中文名亂碼問題;

5.提升文件下載速度;

6.文件刪除後,進行從新編號;

7.其它代碼優化。

version:5.0

新增功能:文件在能夠在本頁實現預覽。

2018/12/08

version:6.0

請求優化:文件上傳界面和查看列表界面,再也不直接請求頁面,統一改成由servlet轉發至jsp。

 

相關文章
相關標籤/搜索