1

我有一个不适用于 Chrome 28 的扩展程序。我相信有一个关于将 blob 从一个上下文传递到另一个上下文的安全更新。如果是这种情况,我正在尝试验证这一点并找到解决方法。任何帮助将不胜感激。

我在 MDN 中读到,如果对象的类型不是 Blob 或 File 对象,它将被转换为字符串......我认为这就是正在发生的事情。https://developer.mozilla.org/en-US/docs/Web/API/FormData

铬 28

该文件已正确检索并且文件大小正确。当我检查类型、控制台日志、检查原型等时,一切看起来都是正确的。Blob 大小与文件大小相匹配。如果一切都发生在同一个窗口中,服务器接收到的是文件数据。如果是通过扩展,服务器接收到这个字符串“[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