pythonのbottleを使ったモバイルからPCへのファイルのアップロード

2019年10月13日日曜日

bottle python

t f B! P L

環境

  • python3.7
  • bottle
  • windows
    多分macやlinuxでもできると思います

アップロード(スマートフォンからPC)

bottleを使います

pip install bottle

http://bottlepy.org/docs/dev/tutorial.html#file-uploadsを参考に
form.html

<form action="/upload" method="post" enctype="multipart/form-data">
  Select a file: <input type="file" name="upload" multiple="multiple" />
  <input type="submit" value="Start upload" />
</form>

filetransfer.py

import os.path
from bottle import route, request, run, template


@route('/', method='GET')
def do_root():
    return template('form.html')


@route('/upload', method='POST')
def do_upload():
    uploads = request.files.getall('upload')
    for upload in uploads:
        name, ext = os.path.splitext(upload.filename)
        if ext not in ('.png', '.jpg', '.jpeg'):
            return 'File extension not allowed.'

    for upload in uploads:
        print(upload.filename)
        save_path = upload.filename
        upload.save(save_path)
    return 'OK'


if __name__ == '__main__':
    run(host='0.0.0.0', port=12345, debug=True)

サーバーを起動したらスマートフォンなどのブラウザでhttp://(PCのIPアドレス):(ポート番号)に接続

demo
cssとか使ってないからボタンなどがちっちゃいけど使えます
対応しているファイルの拡張子はpngとjpgとjpegです

複数のファイルを一度にアップロードできるようにinputにmultipleを指定しました
iphoneのsafariではうまく動きました
kindle fireのsilk browserでは1つずつしかアップロードできませんでした
multipleに対応していないブラウザもあるようです
https://caniuse.com/#feat=input-file-multiple

QooQ