2

私のアプリは、で作成されたローカル イメージ ファイルへの多くの BLOB 参照を使用しますcreateObjectURL

fileこれらのブロブ URL 参照を、アップロードするために本質的に JavaScript オブジェクトに変換する必要があります。

ブロブを取得するには、以下に示すように 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);

<input>HTML要素から標準的な方法で取得したファイルでは、すべてが完全に機能します。

ただし、blob URL を介して参照され、ajax 要求を介して取得され、スライスされて fileReader API に渡されると、まったく同じファイルが失敗します。exif データは返されず、ファイルはサーバーにアップロードされますが、アップロードを正常に処理するまったく同じ PHP スクリプトも失敗します。

ファイルを正しく取得していないようです。どこが間違っていますか?

要約すると、 で参照されるファイルを取得し、それらが標準の JavaScriptオブジェクトcreateObjectURLであるかのように同じ形式で fileReader に渡すことができる必要があります。file

アップデート:

さて、次のように標準の 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 に答える