oss.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from flask import Blueprint, redirect, render_template, abort, flash, url_for, request
  2. from flask_login import login_required
  3. from flask_wtf import FlaskForm
  4. from wtforms import FileField, StringField, SubmitField
  5. from wtforms.validators import DataRequired
  6. from aliyun import aliyun
  7. import app
  8. oss = Blueprint("oss", __name__)
  9. class UploadForm(FlaskForm):
  10. file = FileField("选择文件", validators=[DataRequired()])
  11. path = StringField("存储路径")
  12. submit = SubmitField("上传")
  13. @oss.before_request
  14. def check_aliyun():
  15. if aliyun is None:
  16. app.HBlogFlask.print_user_opt_fail_log("aliyun not used")
  17. abort(404)
  18. return
  19. @oss.route('get/<path:name>')
  20. def get_page(name: str):
  21. app.HBlogFlask.print_user_opt_success_log(f"get file {name}")
  22. url = aliyun.shared_obj(name)
  23. if url is None:
  24. abort(404)
  25. return redirect(url)
  26. @oss.route('upload', methods=["GET", "POST"])
  27. @login_required
  28. @app.role_required("ConfigureSystem", "upload file")
  29. def upload_page():
  30. form = UploadForm()
  31. if form.validate_on_submit():
  32. file = request.files["file"]
  33. path: str = form.path.data
  34. if len(path) > 0 and not path.endswith('/'):
  35. path += "/"
  36. path += file.filename
  37. aliyun.upload_file(path, file)
  38. app.HBlogFlask.print_sys_opt_success_log(f"Upload file {path}")
  39. flash(f"文件 {file.filename} 已上传: {url_for('oss.get_page', name=path, _external=True)}")
  40. return redirect(url_for("oss.upload_page"))
  41. app.HBlogFlask.print_load_page_log(f"OSS upload")
  42. return render_template("oss/upload.html", UploadForm=form)