首先,读为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