1

Chrome 28 で動作しない拡張機能があります。拡張機能を使用して、あるコンテキストから別のコンテキストに BLOB を渡すことに関して、セキュリティ アップデートがあったと思います。これを確認し、その場合の回避策を見つけようとしています。どんな助けでも大歓迎です。

オブジェクトのタイプが Blob または File オブジェクトでない場合、文字列に変換されることを MDN で読みました....これが起こっていることだと思います。https://developer.mozilla.org/en-US/docs/Web/API/FormData

クロム 28

ファイルが正しく取得され、ファイル サイズが正しい。タイプ、コンソールログ、プロトタイプのチェックなどを確認すると、すべてが正しいように見えます。ブロブ サイズはファイル サイズと一致します。すべてが同じウィンドウで行われる場合、サーバーが受け取るのはファイル データです。拡張子を介した場合、サーバーはこの文字列「[object Blob]」を受け取り、要求の実際のサイズは、ファイル サイズではなく、文字列「[object Blob]」のバイト数になります。

クロム 23

ファイルが正しく取得され、ファイル サイズが正しい。タイプ、コンソールログ、プロトタイプのチェックなどを確認すると、すべてが正しいように見えます。すべてが同じウィンドウで行われる場合、サーバーが受け取るのはファイル データです。拡張子を介している場合は、すべて正常に動作し、ファイル データが受信されます。BLOB のサイズと実際のファイル サイズは、コンソールで調べたときと、サーバーに送信したときに一致します。

以下は不自然な例です。私が議論していることを再現するのに役立つことを願っています. そうでない場合は、私に知らせてください。テストできるように、私の個人用サーバーに作業コピーをアップロードします。

拡張タブ

var xhr = new XMLHttpRequest();

xhr.open('GET', 'http://localhost/someImage.png', true);
xhr.responseType = 'blob';

xhr.onload = function (response, status, request) {
    if (xhr.readyState === 4) {
        if (this.response) {
            var blob = new Blob([this.response], { type: 'application/png' });
            blob.name = 'someImage.png';
            window.imageBlob = blob; // For testing
        } else {
            downloadError(response);
        }
    }
};

xhr.onerror = function (e) {
    downloadError(e);
}

xhr.send(null);

メインタブ

var formData = new FormData();
formData.append('file', imageBlob, imageBlob.name);

var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost/upload.php', true);

xhr.onload = function (e) {
    console.log('response', xhr.responseText);
}

xhr.send(formData);

バックエンド

<?php
    print_r($_FILES, true);
?>
4

0 に答える 0