首先,讀爲ArrayBuffer:這似乎是最靈活的解決方案:
var reader = new FileReader();
reader.readAsArrayBuffer(blob);
...和回調轉換爲BLOB:
$(reader).on("loadend", function(evt) {
if (evt.target.readyState === FileReader.DONE) { // DONE == 2
blob = new Blob([evt.target.result]);
}
});
最後一個形式發送:
var fd = new FormData();
fd.append('xferID', xferID);
fd.append('data', blob);
$.ajax({
url: 'http://......',
data: fd,
processData: false,
contentType: false,
type: "POST",
success: function(resultJSON) {...},
error: function(resultJSON) {...}
}
這顯然只是一個大綱;在PHP方面,您將收到$ _FILES超全局上的BLOB數據。
希望得到這個幫助。 :-)
爲什麼你需要發送原始二進制文件?如果你能夠使用FileReader,你已經有了blob,只需發送它。如果你真的想讀二進制文件,那麼你可以使用'XHR.open('get',URL.createObjectURL(blob))' – Kaiido
1.發送一個1Mb的大文件塊(> 1Gb)而不用修改php。 ini限制在哪裏是不可能的; 2.在文件xfer失敗的情況下使用resume執行文件上傳; 3.引入每個塊的文件校驗和,並在出現錯誤時及時恢復。 簡而言之,我的網絡應用程序集成了一些功能,即每個文件上傳器無需外部庫就可以集成這些功能,因爲我必須在上傳文件後對其進行一些修復。 –
好的,將這些信息包含在您的問題的編輯中會很好。對於1,您只能發送大Blob塊(比較'blob.slice()'),然後[合併它們在服務器端](http://stackoverflow.com/questions/36045690/merging-file-chunks -in-PHP)。對於2.以上也將工作。對於3.不知道如何實現它,但讀取和解析正面的1GB文件聽起來像是一個不好的主意IMM。 – Kaiido