使用FileReader.readAsArrayBuffer()我从二进制文件中读取了一些内容,并得到了一个ArrayBuffer。
现在我必须使用JQuery $ .ajax发送RAW二进制读取。
不推荐使用FileReader.readAsBinaryString()函数,因为标记为非标准。我尝试了这里提出的不同解决方案,但由于二进制而改变了数据 - > UTF转换。
除了在数组中循环并将每个字节添加到要发送的字符串之外,任何提示都是强烈的贬义。
感谢您的帮助! : - )
答案 0 :(得分:0)
您是否尝试过FileReader.readAsText
方法?它允许指定编码,但默认使用UTF-8。
请参阅https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsText
要使用jQuery发送文件,您不需要先阅读它。您只需使用FormData对象发送它即可。
答案 1 :(得分:0)
根本不使用FileReader感到愚蠢....您无需阅读文件内容即可将其发送。
var blob = new Blob(['abcdef']) // simulate a file
var chunkSize = 2 // bytes to upload in each request
var chunks = [] // result will be 3 chunks [ab, cd, ef]
var offset = 0 // byte offset
// build the chunk array
do {
chunks.push( blob.slice(offset, offset + chunkSize) )
offset += chunkSize
} while (offset <= blob.size)
// upload the chunk one at the time
chunks.reduce((uploaded, nextChunk) =>
uploaded_chunk.then(() =>
fetch('/upload', {
method: 'post',
body: nextChunk
})
}, Promise.resolve()).then(() => {
// all chunks has been uploaded in sequential order
})
您可能不想使用jQuery ajax,因为它要求您使用.ajax
(而不是.post
)并且您需要设置processData
&amp; contentType
到false
以及更多
看看如何使用jQuery发送blob:How can javascript upload a blob?
fetch比jQuery的ajax更好,并且内置于浏览器中。有时需要polyfill
编辑:如果您可以更改php.init以允许更大的上传,那么您最好不要为了上传更大的文件而进行所有这些操作
答案 2 :(得分:0)
首先,读作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数据。
希望这有帮助。 : - )