javascript
Spring MVC 3:上传多个文件
只是在辦公室又漫長的一天,數據庫不可用,一個團隊成員現在滯后一周。 因此,我們必須作為一個團隊來交付它。 在Spring3,它看起來很直接上傳文件。 但是,從jsp文件上載多個文件幾乎沒有幫助。
上載多個文件需要完成三件事:
a)JSP需要將input [file]元素作為數組傳遞。
<td><input name="fileData[0]" id="image0" type="file" /></td> <td><input name="fileData[1]" id="image1" type="file" /></td>b)Spring MVC中的ModelAttribute / Model對象需要具有MultipartFile的列表。
import java.util.List; import org.springframework.web.multipart.commons.CommonsMultipartFile; public class UploadItem {private String filename;private List<CommonsMultipartFile> fileData;c)在dispatcher-servlet.xml [applicationContext-servlet.xml]中配置Multipart Resolver bean
<!-- Configure the multipart resolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> </bean>d)從模型讀取文件并將其存儲在Controller層的文件位置中的邏輯。
@RequestMapping(method = RequestMethod.POST) public String create(UploadItem uploadItem, BindingResult result, HttpServletRequest request, HttpServletResponse response, HttpSession session) { if (result.hasErrors()) { for (ObjectError error : result.getAllErrors()) { System.err.println("Error: " + error.getCode() + " - " + error.getDefaultMessage()); } return "/uploadfile"; } // Some type of file processing... System.err.println("-------------------------------------------"); try { for(MultipartFile file:uploadItem.getFileData()){ String fileName = null; InputStream inputStream = null; OutputStream outputStream = null; if (file.getSize() > 0) { inputStream = file.getInputStream(); if (file.getSize() > 20000) { System.out.println("File Size exceeded:::" + file.getSize()); return "/uploadfile"; } System.out.println("size::" + file.getSize()); fileName = request.getRealPath("") + "/images/" + file.getOriginalFilename(); outputStream = new FileOutputStream(fileName); System.out.println("fileName:" + file.getOriginalFilename()); int readBytes = 0; byte[] buffer = new byte[10000]; while ((readBytes = inputStream.read(buffer, 0, 10000)) != -1) { outputStream.write(buffer, 0, readBytes); } outputStream.close(); inputStream.close(); // .......................................... session.setAttribute("uploadFile", file.getOriginalFilename()); } //MultipartFile file = uploadItem.getFileData(); } } catch (Exception e) { e.printStackTrace(); } return "redirect:/forms/uploadfileindex"; }我已經擴展了@RoseIndia發現的示例,以動態創建文件節點并將其發布到Controller。
只需下載源代碼并替換下面的jsp文件并進行其他必要的更改:
Upload.jsp
<%@page contentType="text/html;charset=UTF-8"%> <%@page pageEncoding="UTF-8"%> <%@ page session="false"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%><html> <head> <META http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Upload Example</title> <script language="JavaScript"> var count=0; function add(type) { //Create an input type dynamically. var table = document.getElementById("fileUploadTable"); var tr = document.createElement("tr"); var td = document.createElement("td"); var element = document.createElement("input");//Assign different attributes to the element. element.setAttribute("type", "file"); element.setAttribute("value", ""); element.setAttribute("name", "fileData["+type+"]"); //Append the element in page (in span). td.appendChild(element); tr.appendChild(td); table.appendChild(tr); } function Validate() { var image =document.getElementById("image").value; if(image!=''){ var checkimg = image.toLowerCase(); if (!checkimg.match(/(\.jpg|\.png|\.JPG|\.PNG|\.jpeg|\.JPEG)$/)){ alert("Please enter Image File Extensions .jpg,.png,.jpeg"); document.getElementById("image").focus(); return false; } } return true; }</script> </head> <body> <form:form modelAttribute="uploadItem" name="frm" method="post" enctype="multipart/form-data" onSubmit="return Validate();"> <fieldset><legend>Upload File</legend> <table > <tr> <input type="button" name="Add Image" onclick="add(count++)" value="Add Image"/> </tr> <tr> <table id="fileUploadTable"> <!--td><form:label for="fileData" path="fileData">File</form:label><br /> </td> <td><input name="fileData[0]" id="image0" type="file" /></td> <td><input name="fileData[1]" id="image1" type="file" /></td--> </table> </tr> <tr> <td><br /> </td> <td><input type="submit" value="Upload" /></td> </tr> </table> </fieldset> </form:form> </body> </html>UploadItem.java,為私有List fileData;,UploadFileController.java生成getter和setter方法,然后僅復制并粘貼上面博客中提到的create(…)。
注意:如果在Spring MVC中文件上傳仍然遇到問題,請添加MultipartFilter。 請參考這里 。
<filter> <filter-name>multipartFilter</filter-name> <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class> </filter> <filter-mapping> <filter-name>multipartFilter</filter-name> <url-pattern>/springrest/*</url-pattern> </filter-mapping><bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize"> <value>10000000</value> </property> </bean>參考:在Bemused博客上,從我們的JCG合作伙伴 Srinivas Ovn 在Spring MVC 3中上傳多個文件 。
翻譯自: https://www.javacodegeeks.com/2013/01/spring-mvc-3-upload-multiple-files.html
總結
以上是生活随笔為你收集整理的Spring MVC 3:上传多个文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 选择您的收藏库
- 下一篇: Spring Data JPA和分页