使用 springMVC 提供的文件上傳須要在項目中加入兩個 jar 包,對應的 maven 的依賴分別是:commons-io 和 commons-fileuploadhtml
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
springMVC 的配置文件須要注入 sprigMVC 支持文件上傳的類 CommonsMultipartResolver 的bean,bean 的 id 爲multipartResolver,該 id 是固定的,springMVC 在加載時會去容器查找該 id 的bean,若容器中存在該 id,則支持文件上傳,若不存在,則不支持文件上傳前端
//html代碼 圖片上傳:<input type="file" name="file1" multiple="multiple" id="file0" /> <img src="" id="img0"> <button id="ajax_upload">Ajax上傳</button> //js 代碼 $("#file0").change(function () { var formData = new FormData(); formData.append("file",document.getElementById("file0").files[0]); $.ajax({ url : "ajaxUpload", data : formData, type : "post", contentType:false, processData:false, dataType : "json", success : function(response){ if(response.dataState == "success"){ // 爲 src 屬性設置上傳文件的相對路徑,實現文件預覽 $("#img0").attr("src",response.responseMap["fileUrl"]); }else{ alert(response.dataState); } } }); });
注:ajax 發起文件上傳的請求時須要將 contentType 和 processType 都設置爲 falseajax
使用 springMvc 實現文件上傳時,congtroller 須要指定 MultipartFile 類型的參數來接收前端傳來的文件數據spring
@RequestMapping(value = "ajaxUpload",produces = {"text/html;charset=UTF-8;","application/json;"}) @ResponseBody public ResponseResult ajaxUplod(ResponseResult responseResult, MultipartFile file, HttpServletRequest request){ // 獲取上傳文件的原始名稱 String fileName = file.getOriginalFilename(); // 獲取上傳文件的後綴名 String ext = fileName.substring(fileName.lastIndexOf(".")); // 獲取當前項目資源文件的絕對路徑 StringBuilder stringBuilder1 = new StringBuilder(request.getSession().getServletContext().getRealPath("/")); String baseUrl = stringBuilder1.toString(); // 設置本地文件的相對路徑 StringBuilder stringBuilder2 = new StringBuilder(File.separator); stringBuilder2.append("upload"); stringBuilder2.append(File.separator); stringBuilder2.append(Calendar.YEAR); stringBuilder2.append("-"); stringBuilder2.append(Calendar.MONTH); stringBuilder2.append("-"); stringBuilder2.append(Calendar.DATE); stringBuilder2.append(ext); String fileUrl = stringBuilder2.toString(); // 當前項目路徑 + 文件存儲的相對路徑 = 上傳文件存儲的絕對路徑 File localFile = new File(stringBuilder1.append(stringBuilder2).toString()); Map<String,Object> map = new HashMap(); // 將文件的相對路徑返回給前端實現文件預覽 map.put("fileUrl",fileUrl); if(!localFile.exists()){ localFile.mkdirs(); } try { file.transferTo(localFile); responseResult.setDataState("success"); responseResult.setMsg("上傳成功"); responseResult.setResponseMap(map); } catch (IOException e) { responseResult.setDataState("fail"); responseResult.setMsg("上傳失敗"); e.printStackTrace(); } return responseResult; }
注:json