我正在编写一个 chrome 扩展内容脚本,它将自己嵌入到某些页面上,当存在某些文件类型链接(.doc、.torrent 等)时,它将下载该文件,然后将文件 POST 到 python 网络服务器将保存该文件。python服务器正在工作,并处理正常的multipart/form-data POST请求,并在我使用我为它编写的html接口时成功保存了文件。
我有 javascript 正确下载文件:
var req = new XMLHttpRequest();
req.open('GET', 'http://foo.com/bar.torrent', false);
req.overrideMimeType('text/plain; charset=x-user-defined');
req.send(null);
if (req.status != 200) return '';
var response = req.responseText;
然后当我尝试创建一个 POST 请求并上传它时
// Define a boundary, I stole this from IE but you can use any string AFAIK
var boundary = "---------------------------7da24f2e50046";
var xhr = new XMLHttpRequest();
var body = '--' + boundary + '\r\n'
// Parameter name is "file" and local filename is "temp.txt"
+ 'Content-Disposition: form-data; name="upfile";'
+ 'filename="temp.torrent"\r\n'
// Add the file's mime-type
+ 'Content-type: application/bittorrent\r\n\r\n'
+ response + '\r\n';
//+ boundary + '--';
xhr.open("POST", "http://python.server/", true);
xhr.setRequestHeader(
"Content-type", "multipart/form-data; boundary="+boundary
);
xhr.onreadystatechange = function ()
{
if (xhr.readyState == 4 && xhr.status == 200)
alert("File uploaded!");
}
xhr.send(body);
它认为它已成功上传,但是当我尝试打开文件时,它说数据已损坏。我认为这是某种编码问题,但我不是 100% 确定。
任何想法都会非常有帮助。