搭建環境
這裡使用maven匯入jar包:
<dependencies> <!--檔案上傳--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> <!--json--> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160810</version> </dependency></dependencies>
三個主要的jar包,這裡還將使用jquery以及非同步提交表單,所以需要jquery和jquery.form檔案
jsp頁面
<%-- Created by IntelliJ IDEA. User: wqh Date: 2017/5/26 Time: 9:46 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.1.1.min.js"></script><script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.form.js"></script><script type="text/javascript"> $(function () { $("#sub").bind("click",function () { var option = { type:"post", url:"${pageContext.request.contextPath}/TestServlet", async: true, enctype:"multipart/form-data", dataType:"json", error:function(data){ alert(data); }, success:function(msg){ //將結果格式化為json var json = eval(msg); var data = ""; $.each(json,function (index,item) { var key = json[index].file; data = data +"==="+ key }); alert(data); } }; $("#fileForm").ajaxSubmit(option); }) });</script><head> <title>Title</title></head><body> <form action="#" id="fileForm" enctype="multipart/form-data" method="post" > <input type="file" name="file"/><br> <input type="file" name="file"/><br> <input type="file" name="file"/><br> <button type="submit" name="sub" id="sub">提交</button> </form></body></html>
servlet代碼
檔案上傳測試,上傳檔案就不儲存到本地l。直接向頁面返迴文件名,返回json格式。
req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); List<String> fileName = new ArrayList<>(); boolean ismultipartContent = ServletFileUpload.isMultipartContent(req); //判斷是否是檔案上傳 if (ismultipartContent) { DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload fileUpload = new ServletFileUpload(factory); try { List<FileItem> fileItems = fileUpload.parseRequest(req); for (FileItem fileItem : fileItems) { //判斷欄位的類型 if (fileItem.isFormField()) { //處理普通欄位 } else{ //檔案欄位,處理上傳欄位,這裡就不把檔案儲存到本地了 fileName.add(fileItem.getName()); } } } catch (FileUploadException e) { e.printStackTrace(); } //將list轉化為json int index = 1; JSONArray jsonArray = new JSONArray(); for (String s : fileName){ JSONObject jsonObject = new JSONObject(); jsonObject.put("file",s); jsonArray.put(jsonObject); } resp.getWriter().print(jsonArray); }
測試
選擇上傳的檔案
檔案上傳測試和返回json格式的檔案名稱成功。。