file.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import os
  2. from flask import request, jsonify, send_file
  3. from werkzeug.utils import secure_filename
  4. from werkzeug.datastructures import FileStorage
  5. import uuid
  6. from app import app
  7. from .resp import success_resp, error_resp
  8. import time
  9. UPLOAD_PATH = ""
  10. OUTPUT_DIR = ""
  11. def get_upload_dir():
  12. return UPLOAD_PATH
  13. def get_output_dir():
  14. return OUTPUT_DIR
  15. def set_options(upload_path, save_dir):
  16. global UPLOAD_PATH, OUTPUT_DIR
  17. UPLOAD_PATH = upload_path
  18. OUTPUT_DIR = save_dir
  19. print("dirs", UPLOAD_PATH, OUTPUT_DIR)
  20. @app.route("/outputs/<path:filename>")
  21. def get_outputs_files(filename):
  22. # 处理后的文件
  23. return send_file(os.path.join(OUTPUT_DIR, filename), mimetype="image/png")
  24. @app.route("/uploads/<path:filename>")
  25. def get_upload_files(filename):
  26. # 用户上传的原始文件
  27. return send_file(os.path.join(UPLOAD_PATH, filename), mimetype="image/png")
  28. @app.route("/upload", methods=['POST'])
  29. def upload_file():
  30. # 上传图片
  31. if 'file' not in request.files:
  32. return jsonify(error_resp("请选择图片!"))
  33. file = request.files['file']
  34. file_path, file_id = save_upload_file(file)
  35. return jsonify(success_resp({
  36. "fileId": file_id,
  37. "url": file_url(file_path)
  38. }))
  39. def file_url(path, output=False):
  40. if output is True:
  41. file_id = os.path.relpath(path, OUTPUT_DIR)
  42. return "/outputs/{}".format(file_id)
  43. file_id = os.path.relpath(path, UPLOAD_PATH)
  44. return "/uploads/{}".format(file_id)
  45. def save_upload_file(file: FileStorage):
  46. # 如果区分用户,加文件前缀或者文件夹名称
  47. if file.filename == '':
  48. filename = "unknown.png"
  49. else:
  50. filename = secure_filename(file.filename)
  51. paths = os.path.splitext(filename)
  52. t = time.strftime("%Y%m%d%H%M%S", time.localtime())
  53. filename = "{}_{}{}_{}".format(paths[0], t, uuid.uuid4().hex, paths[1])
  54. file_path = get_upload_file_path(filename)
  55. file.save(file_path)
  56. return file_path, filename
  57. def get_output_file_path(filename: str, suffix: str = None, fun: str = None):
  58. if filename == '':
  59. filename = "unknown.png"
  60. else:
  61. filename = secure_filename(filename)
  62. paths = os.path.splitext(filename)
  63. if suffix is None or len(suffix) == 0:
  64. suffix = time.strftime("%Y%m%d%H%M%S", time.localtime())
  65. if fun is not None:
  66. suffix = "{}_{}".format(fun, suffix)
  67. filename = "{}_{}{}".format(paths[0], suffix, paths[1])
  68. return os.path.join(OUTPUT_DIR, filename)
  69. def get_upload_file_path(name):
  70. return os.path.join(UPLOAD_PATH, name)