FormData對象,是能夠使用一系列的鍵值對來模擬一個完整的表單,而後使用XMLHttpRequest發送這個"表單"。 在 Mozilla Developer 網站 使用FormData對象 有詳盡的FormData對象使用說明。 但上傳文件部分只有底層的XMLHttpRequest對象發送上傳請求,那麼怎麼經過jQuery的Ajax上傳呢? 本文將介紹經過jQuery使用FormData對象上傳文件。javascript
使用<form>表單初始化FormData對象方式上傳文件前端
HTML代碼java
<form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file" name="file"/> <button id="upload" type="button">upload</button> </form>
javascript代碼web
$.ajax({ url: '/upload', type: 'POST', cache: false, data: new FormData($('#uploadForm')[0]), processData: false, contentType: false }).done(function(res) { }).fail(function(res) {});
這裏要注意幾點:ajax
<form>標籤添加enctype="multipart/form-data"屬性。spring
上傳後,服務器端代碼須要使用從查詢參數名爲file獲取文件輸入流對象,由於<input>中聲明的是name="file"。 若是不是用<form>表單構造FormData對象又該怎麼作呢?緩存
使用FormData對象添加字段方式上傳文件服務器
HTML代碼app
<div id="uploadForm"> <input id="file" type="file"/> <button id="upload" type="button">upload</button> </div>
這裏沒有<form>標籤,也沒有enctype="multipart/form-data"屬性。 javascript代碼ide
var formData = new FormData(); formData.append('file', $('#file')[0].files[0]); $.ajax({ url: '/upload', type: 'POST', cache: false, data: formData, processData: false, contentType: false }).done(function(res) { }).fail(function(res) {});
這裏有幾處不同:
後臺接收文件:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"/> </bean>
@RequestMapping(value = "/import_tg_resource") public ModelAndView import_tg_resource(@RequestParam(value = "file", required = false) MultipartFile[] files, HttpServletRequest request, ModelMap model) { System.out.println("開始批量上傳:文件數量:" + files.length); for (MultipartFile file : files ) { String path = request.getSession().getServletContext().getRealPath("upload"); String fileName = file.getOriginalFilename(); String prefix = fileName.substring(fileName.lastIndexOf(".")); fileName = new Date().getTime() + prefix; // System.out.println("保存路徑 " + path); File targetFile = new File(path, fileName); if(!targetFile.exists()){ targetFile.mkdirs(); } file.transferTo(targetFile); } }