私のアプリは、で作成されたローカル イメージ ファイルへの多くの 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 メソッドを使用して同じことを行うにはどうすればよいですか?