oss.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from flask import Blueprint, redirect, render_template, abort, flash, url_for, request
  2. from flask_login import login_required, current_user
  3. from flask_wtf import FlaskForm
  4. from wtforms import FileField, 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. submit = SubmitField("上传")
  12. @oss.before_request
  13. def check_aliyun():
  14. if aliyun is None:
  15. app.HBlogFlask.print_user_opt_fail_log("aliyun not used")
  16. abort(404)
  17. return
  18. @oss.route('get/<string:name>')
  19. def get_page(name: str):
  20. app.HBlogFlask.print_user_opt_success_log(f"get file {name}")
  21. return redirect(aliyun.shared_obj(name))
  22. @oss.route('upload', methods=["GET", "POST"])
  23. @login_required
  24. def upload_page():
  25. if not current_user.check_role("ConfigureSystem"):
  26. app.HBlogFlask.print_user_not_allow_opt_log("upload file")
  27. abort(403)
  28. return
  29. form = UploadForm()
  30. if form.validate_on_submit():
  31. file = request.files["file"]
  32. aliyun.upload_file(file.filename, file)
  33. app.HBlogFlask.print_sys_opt_success_log(f"Upload file {file.filename}")
  34. flash(f"文件 {file.filename} 已上传: {url_for('oss.get_page', name=file.filename, _external=True)}")
  35. return redirect(url_for("oss.upload_page"))
  36. app.HBlogFlask.print_load_page_log(f"OSS upload")
  37. return render_template("oss/upload.html", UploadForm=form)