在Chrome 28扩展程序中破解了Javascript Blob

时间:2013-07-29 21:45:23

标签: javascript google-chrome-extension blob multipartform-data form-data

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

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

Chrome 28

正确检索文件并且文件大小正确。当我检查类型,控制台日志,检查原型等等一切看起来都正确。 blob大小与文件大小匹配。如果一切发生在同一窗口中,服务器接收的是文件数据。如果是通过扩展名,服务器会收到此字符串“[object Blob]”,请求的实际大小是字符串“[object Blob]”的字节数,而不是文件大小。

Chrome 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);
?>

0 个答案:

没有答案