HTML5+Ajax上傳文件

歡迎交換友鏈 Laker's Blog--進擊的程序媛
Github:https://github.com/younglaker
微博: 江小湖Lakergit


HTML5+Ajax上傳文件

HTML

input類型設爲filegithub

<label for="img_input"></label>
<input id="img_input" type="file"/>

若是想上傳多文件,可添加multipleajax

<input type="file" name="img" multiple="multiple" />

accept="MIME_type"限制提交的文件類型,用逗號隔開的 MIME 類型列表(服務器端也要最好類型檢測雙保險),如:json

<input type="file" accept="image/gif, image/jpeg" />
<input type="file" accept="image/*"/>

獲取文件內容

JavaScript:跨域

var file = document.getElementById('fileToUpload').files[0];

jQuery:服務器

var file = $("#img_input").prop("files")[0];

上傳

XMLHttpRequest Level 2添加了一個新的接口FormData。利用FormData對象,咱們能夠經過JavaScript用一些鍵值對來模擬一系列表單控件。比起普通的Ajax,使用FormData的最大優勢就是咱們能夠異步上傳一個二進制文件。app

// 建立
var form_data = new FormData();

// 獲取文件
var file_data = $("#img_input").prop("files")[0];

// 把因此表單信息
form_data.append("id", "001");
form_data.append("name", "test");
form_data.append("img", file_data);

$.ajax({
    type: "POST",
    url: "....",
    dataType : "json",
    processData: false,  // 注意:讓jQuery不要處理數據
    contentType: false,  // 注意:讓jQuery不要設置contentType
    data: form_data
}).success(function(msg) {
    console.log(msg);
}).fail(function(msg) {
    console.log(msg);
});

多文件上傳

方法一 :一次性上傳多個文件異步

若是後臺接口容許多文件上傳,就把文件存到一個變量後上傳。async

方法二 :一次性上傳多個文件url

若是後臺接口要求單個文件,就循環獲取文件信息提交,Ajax使用同步上傳async: false

跨域

JSONP是使用GET方法,沒法發送文件。能夠讓後臺開啓CORS,Ajax也使用跨域crossDomain: true便可。

$.ajax({
    type: "POST",
    url: "....",
    dataType : "json",
    crossDomain: true,
    processData: false,  // 注意:讓jQuery不要處理數據
    contentType: false,  // 注意:讓jQuery不要設置contentType
    data: form_data
}).success(function(msg) {
    console.log(msg);
}).fail(function(msg) {
    console.log(msg);
});
相關文章
相關標籤/搜索