我有一个不适用于 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);
?>