ユーザーがファイルをアップロードできる簡単なWebページが欲しいのですが。それを行う最も簡単な方法は何でしょうか。
SimpleHTTPServer
を開始する方法は知っていますが、SimpleHTTPServer
を使用してファイルをアップロードする方法がわかりません。それが可能かどうかさえわかりません。
Cgiを使用してファイルをアップロードするためのコードをいくつか見つけましたが、コマンドラインでこのコードを実行すると、画面にHTMLコードが出力されます。
私はまだPythonに慣れておらず、投稿に追加したのと同じコードを使用しようとしました。唯一の問題は、単一のファイルのアップロードしか許可されていないことです。で複数のファイルをアップロードしたかったのです。時間。
見つかったまだ利用可能なコードを使用して ここ 、deal_post_data
メソッドを次のように置き換えることができます。
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST'})
self.send_response(200)
self.end_headers()
saved_fns = ""
try:
if isinstance(form['file'], list):
for f in form['file']:
print f.filename
saved_fns = saved_fns + ", " + f.filename
self.save_file(f)
self.wfile.write(f.value)
else:
f = form['file']
self.save_file(f)
saved_fns = saved_fns + f.filename
self.wfile.write(f.value)
return (True, "File(s) '%s' upload success!" % saved_fns)
except IOError:
return (False, "Can't create file to write, do you have permission to write?")
次に、次の関数を追加して、アップロードされたファイルを保存します。
def save_file(self, file):
outpath = os.path.join("", file.filename)
with open(outpath, 'wb') as fout:
shutil.copyfileobj(file.file, fout, 100000)
最後に、挿入されたHTMLのmultiple
タグを使用して、一度に複数のファイルをアップロードできるようにhtmlフォームを変更します。
これをテストし終えたところですが、正常に動作します。
お役に立てば幸いです
はい、SimpleHTTPServerは正しいリクエストハンドラでhttpアップロードを受信できます。
基本的に、フォームなどがデータをアップロードするdo_POSTメソッドを定義する必要があります。その後、アップロードはself.rfileから読み取り可能になります。
class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
# ...
def do_POST(self):
for line in self.rfile:
# do something with the line
print line
もちろん、ブラウザからアップロードする場合は、httpサーバーに投稿するフォームをどこかに用意する必要があります。
<form enctype="multipart/form-data" method="post" action="http://hostname.of.server:8080/">
<input name="file" type="file"/>
<input type="submit" value="upload"/>
</form>
フォームデータから生データを解析する方法の詳細は、質問へのコメントとして投稿されたリンクにあります。