PythonとかJavaScriptを使って画像やzipファイルをアップロードしたい時がある。
multipart/form-dataでpostするときにいつも忘れてしまうので、備忘録として残しておく。
■Python
ローカルのファイルをアップロードするためのスクリプト
#!/usr/bin/python import requests with open("test.tgz", "rb") as f: tar_data = f.read() url = "http://[web_ip]/upload/" #name、filename、Content-Typeを指定 files = {'file': ('test.tgz', tar_data, "application/x-compressed-tar")} #nameとfilenameに同じ値を指定する場合 => files = {'file': tar_data} #nameとfilenameをそれぞれ指定する場合 => files = {'file': ('test.tgz', tar_data)} headers = {'Cookie': 'JSESSIONID=xxxxxxx;'} req = requests.post(url=url, files=files, headers=headers) print(req.text)
■JavaScript (fetchを使っているが、xhrでもよい)
別のサーバに置かれているファイルを取りに行って、それをアップロードするためにスクリプト。
アップロード先のサーバとのセッションはすでに確立できているてい。
function upload_file() { fetch("http://[fileserver_ip]/test.tgz", { method: 'GET', }) .then(response => response.blob()) .then(data => { var form = new FormData(); var tar_data = new Blob([data], { type: "application/x-compressed-tar" }); form.append('file', tar_data, 'test.tgz'); url = "http://[web_ip]/upload/"; fetch(url, {method: 'POST',body: form}) .then(response => response.text()) .then(text => console.log("Success")) .catch(err => console.log("Failed")) }).catch(err => { console.log("Failed"); }); } upload_file();
とりあえずアップロードのスクリプトはこの辺おさえておけば大丈夫そう。