Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Bottleで画像を受け取る/送る

python用超軽量WEB鯖Bottleで画像を受け取る方法です

形式としては、formで添付ファイルとして来ているようなケースを想定します。
このスクリプトでは組込み機器との連携を前提にしているので投稿フォームは無し。

実際のところ

Jpeg画像を受け取るケースを考えます。

from bottle import route, request, run, get, post, static_file
import os
from datetime import datetime

workPath = os.getcwd() + '/tmp'

@post('/img')
def receiveImg():
  timestump = datetime.now().strftime('%m%d%H%M%S')
  upload   = request.files.get('upload')
  name, ext = os.path.splitext(upload.filename)

  if ext not in ('.jpg','.jpeg'):
    return "File extension not allowed."

  save_path = workPath
  upload.filename = timestump + ext
  file_path = "{path}/{file}".format(path=save_path, file=upload.filename)

  upload.save(workPath, overwrite=True)
  return "" + timestump + ext + "\r\n"

@get('/get/<filename>')
def send_image(filename):
  return static_file(filename, root=workPath, mimetype='image/jpeg')


if __name__ == '__main__':
  print(workPath)
  run(host='0.0.0.0', port=8080)

動作確認

アップロード

"/PATH/TO"にあるFILE.jpgをアップロードするには

$ curl -F "upload=@/PATH/TO/FILE.jpg" http://localhost:8080/img

ダウンロード

1月1日0時0分0秒の画像をfoobar.jpgとして保存するには

$ curl -o foobar.jpg http://localhost:8080/img/0101000000.jpg