upload.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import logging
  2. import uuid
  3. from PIL import Image
  4. from flask import request, Blueprint
  5. from config import UPLOAD_DIR
  6. from route.util import make_response
  7. bp = Blueprint("upload", __name__, url_prefix='/')
  8. def upload(type):
  9. # 检查是否正确上传了文件
  10. if 'file' not in request.files:
  11. return make_response(400, "no file part.", {})
  12. file = request.files['file']
  13. if file.filename == '':
  14. return make_response(400, "no selected file.", {})
  15. # 随机 uuid 名称
  16. random_name = str(uuid.uuid4())
  17. # 图片格式检查 & 转换
  18. if type == "photo":
  19. try:
  20. img = Image.open(file.stream)
  21. img.verify()
  22. img = Image.open(file.stream)
  23. img = img.convert("RGB")
  24. img.save(open(UPLOAD_DIR + random_name + ".jpg", "wb"))
  25. except Exception as e:
  26. logging.exception(e)
  27. return make_response(400, "cannot identify image file.", {})
  28. elif type == "video":
  29. if not file.filename.endswith(".mp4"):
  30. return make_response(400, "only mp4 videos are accepted.", {})
  31. file.save(UPLOAD_DIR + random_name + ".mp4")
  32. else:
  33. assert False, "unknown upload format"
  34. return make_response(201, "success", {"uuid": random_name})
  35. @bp.route("/photos", methods=["POST"])
  36. def upload_photo():
  37. return upload("photo")
  38. @bp.route("/videos", methods=["POST"])
  39. def upload_video():
  40. return upload("video")