FormData
對象,是可使用一系列的鍵值對來模擬一個完整的表單,而後使用XMLHttpRequest
發送這個"表單"。javascript
在 Mozilla Developer 網站 使用FormData對象 有詳盡的FormData
對象使用說明。html
但上傳文件部分只有底層的XMLHttpRequest
對象發送上傳請求,那麼怎麼經過jQuery
的Ajax
上傳呢?
本文將介紹經過jQuery
使用FormData
對象上傳文件。java
<form>
表單初始化FormData
對象方式上傳文件HTML代碼ajax
<form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file" name="file"/> <button id="upload" type="button">upload</button> </form>
javascript代碼緩存
$.ajax({
url: '/upload', type: 'POST', cache: false, data: new FormData($('#uploadForm')[0]), processData: false, contentType: false }).done(function(res) { }).fail(function(res) {});
這裏要注意幾點:服務器
processData
設置爲false
。由於data
值是FormData
對象,不須要對數據作處理。<form>
標籤添加enctype="multipart/form-data"
屬性。cache
設置爲false
,上傳文件不須要緩存。contentType
設置爲false
。由於是由<form>
表單構造的FormData
對象,且已經聲明瞭屬性enctype="multipart/form-data"
,因此這裏設置爲false。上傳後,服務器端代碼須要使用從查詢參數名爲file
獲取文件輸入流對象,由於<input>
中聲明的是name="file"
。oracle
若是不是用<form>
表單構造FormData
對象又該怎麼作呢?app
FormData
對象添加字段方式上傳文件HTML代碼ide
<div id="uploadForm"> <input id="file" type="file"/> <button id="upload" type="button">upload</button> </div>
這裏沒有<form>
標籤,也沒有enctype="multipart/form-data"
屬性。網站
javascript代碼
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) {});
這裏有幾處不同:
append()
的第二個參數應是文件對象,即$('#file')[0].files[0]
。contentType
也要設置爲‘false’。從代碼$('#file')[0].files[0]
中能夠看到一個<input type="file">
標籤可以上傳多個文件,
只須要在<input type="file">
裏添加multiple
或multiple="multiple"
屬性。
從Servlet 3.0
開始,能夠經過 request.getPart()
或 request.getPars()
兩個接口獲取上傳的文件。
這裏很少說,詳細請參考官網教程 Uploading Files with Java Servlet Technology 以及示例 The fileupload Example Application
做者:Agreal連接:http://www.jianshu.com/p/46e6e03a0d53來源:簡書著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。