2

我的应用程序使用了许多对使用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 方法做同样的事情?

4

1 回答 1

0

您目前不能在 jQuery 1.x 或 2.x 中执行此操作。见:https ://github.com/jquery/jquery/pull/1525

于 2014-11-05T15:18:32.203 回答