我的应用程序使用了许多对使用createObjectURL
.
我需要将这些 blob url 引用转换为本质上是一个 javascriptfile
对象才能上传它们。
要检索 blob,我有 jquery 的 Ajax 函数,如下所示:
var bloburl = 'blob:3c9230a9-55ea-4357-a2d3-db97673a1947';
$.ajax({
url : bloburl, //Blob URL reference
type : 'GET',
processData : false,
contentType : false,
success: function(file) {
//Here I am attempting to build an object that can be read by the FileReader API
var blob = new Blob([file], { type: 'image/jpeg' });
self.cache.filestoupload.push(blob);
}
});
填充数组后,self.cache.filestoupload
应用程序开始攻击数组中的第一个文件,对前几个字节进行切片,然后通过 fileReader API 将其作为二进制字符串读取。然后将文件的这个片段传递给 webworker 并读取图像 exif 数据。最后它开始上传完整的文件。
var binaryReader = new FileReader();
binaryReader.onload = function (e) {
worker.postMessage({
guid: fileindex,
binary_string: binaryReader.result
});
};
binaryReader.readAsBinaryString(filePart);
一切都与以标准方式从 HTML<input>
元素中检索的文件完美配合。
但是,当通过 blob URL 引用、通过 ajax 请求检索、然后切片并传递到 fileReader API 时,相同的文件会失败。没有返回 exif 数据,虽然文件上传到服务器,但处理上传的 PHP 脚本也失败了。
看来我没有正确检索文件。我哪里错了?
总而言之,我需要能够检索引用的文件,并将它们以与标准 javascript对象createObjectURL
相同的格式传递给 fileReaderfile
更新:
好的,我已使用标准 xhr 请求使其工作,如下所示:
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onreadystatechange = function(e) {
if (xhr.readyState == 4) {
var myBlob = this.response;
self.cache.filestoupload.push(myBlob);
}
};
xhr.send();
如何使用 jQuery 的 $.Ajax 方法做同样的事情?