一部のページに埋め込むクロム拡張コンテンツスクリプトを作成しています。特定のファイルタイプのリンク(.doc、.torrentなど)がある場合、そのファイルをダウンロードし、Python WebにファイルPOSTを実行しますそのファイルを保存するサーバー。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% 確実ではありません。
どんな考えでも非常に役に立ちます。