原文:http://www.verydemo.com/demo_c143_i23854.html
我們在 multifile 中可以很容易的發現如何使用,這里就簡單說說了,首先在頁面上我們需要有這樣幾行標簽代碼
<!-- 注意這里的attach名字為固定,如果要控制上傳的格式,則追加accept="doc|txt|jsp" 最大上傳量maxlength="3" --> <input type="file" name="attach" id="multiFileId" class=" input_txt"/> <div id="multiFileId-list"></div>
然后在該頁面中引入相關的JS和CSS
<script src="./js/multifile/jquery.MetaData.js" type="text/javascript"></script> <script src="./js/multifile/jquery.MultiFile.js" type="text/javascript"></script> <script src="./js/multifile/jquery.blockUI.js" type="text/javascript"></script> <script src="./js/multifile/documentation.js" type="text/javascript"></script> <link href="./js/multifile/documentation.css" type="text/css" rel="stylesheet" />
然后通過js和設置剛剛寫入的標簽
<script type="text/javascript"> $(function() { //加載多文件上傳的JS $('#multiFileId').MultiFile( { list : '#multiFileId-list', STRING : { remove : '<img src="http://www.fyneworks.com/i/bin.gif" height="16" width="16" alt="x"/>' } }); }); </script>
當然,上面的這段 JS 以及上面的 HTML 標簽,我們可以根據實際的情況參考官網上的 Demo 上說明的屬性進行設置。
Ok ,前台我們使用這個插件的地方基本就 ok 了,下面我們需要關心的是后台我們如何處理這里上傳的多文件進行保存。在調研的過程中我將這一部分簡單的寫了一個工具類。
首先在 Controller 里接收
@RequestMapping(value="/uploadFile/upload.ac", method = RequestMethod.POST) public String uploadFile(HttpServletRequest request, HttpServletResponse response) { List<MultipartFile> multipartFiles = UploadHelper.getFileSet(request, 1024 * 20, null); String path = "D:" + File.separator; if (multipartFiles.size() == 0) { // TODO 給出提示,不允許沒選擇文件點擊上傳 } for (MultipartFile multipartFile : multipartFiles) { try { String filePath = UploadHelper.uploadFile(multipartFile, path); System.out.println(filePath); } catch (Exception e) { e.printStackTrace(); } // 拿到的imgPath就是圖片的相對於contextPath的存儲路徑了 } return null; }
UploadHelper.java
package org.elongcom.common; import java.io.File; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import org.springframework.util.FileCopyUtils; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; /** * @author xdwang * * @create 2012-11-19 下午6:24:03 * * @email:xdwangiflytek@gmail.com * * @description 上傳幫助類 * */ public class UploadHelper { /** * @descrption 根據HttpServletRequest對象獲取MultipartFile集合 * @author xdwang * @create 2012-11-19下午5:11:41 * @param request * @param maxLength * 文件最大限制 * @param allowExtName * 不允許上傳的文件擴展名 * @return MultipartFile集合 */ public static List<MultipartFile> getFileSet(HttpServletRequest request, long maxLength, String[] allowExtName) { MultipartHttpServletRequest multipartRequest = null; try { multipartRequest = (MultipartHttpServletRequest) request; } catch (Exception e) { return new LinkedList<MultipartFile>(); } List<MultipartFile> files = new LinkedList<MultipartFile>(); files = multipartRequest.getFiles("attach"); // 移除不符合條件的 for (int i = 0; i < files.size(); i++) { if (!validateFile(files.get(i), maxLength, allowExtName)) { files.remove(files.get(i)); if (files.size() == 0) { return files; } } } return files; } /** * @descrption 保存文件 * @author xdwang * @create 2012-11-19下午4:17:36 * @param file * MultipartFile對象 * @param path * 保存路徑,如“D:\\File\\” * @return 保存的全路徑 如“D:\\File\\2345678.txt” * @throws Exception * 文件保存失敗 */ public static String uploadFile(MultipartFile file, String path) throws Exception { String filename = file.getOriginalFilename(); String extName = filename.substring(filename.lastIndexOf(".")) .toLowerCase(); String lastFileName = UUID.randomUUID().toString() + extName; if (!path.endsWith(File.separator)) { path = path + File.separator; } File temp = new File(path); if (!temp.isDirectory()) { temp.mkdir(); } // 圖片存儲的全路徑 String fileFullPath = path + lastFileName; FileCopyUtils.copy(file.getBytes(), new File(fileFullPath)); return fileFullPath; } /** * @descrption 驗證文件格式,這里主要驗證后綴名 * @author xdwang * @create 2012-11-19下午4:08:12 * @param file * MultipartFile對象 * @param maxLength * 文件最大限制 * @param allowExtName * 不允許上傳的文件擴展名 * @return 文件格式是否合法 */ private static boolean validateFile(MultipartFile file, long maxLength, String[] allowExtName) { if (file.getSize() < 0 || file.getSize() > maxLength) return false; String filename = file.getOriginalFilename(); // 處理不選擇文件點擊上傳時,也會有MultipartFile對象,在此進行過濾 if (filename == "") { return false; } String extName = filename.substring(filename.lastIndexOf(".")) .toLowerCase(); if (allowExtName == null || allowExtName.length == 0 || Arrays.binarySearch(allowExtName, extName) != -1) { return true; } else { return false; } } }
這里需要多說一點的是,表單提交時如果有文件進行上傳時,需要在表單上設置enctype="multipart/form-data",否則上面的 multipartRequest = (MultipartHttpServletRequest) request;進行強轉時會報錯