oss.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from flask import Flask, Blueprint, redirect, render_template, request, abort, flash, url_for
  2. from flask_login import login_required, current_user
  3. from typing import Optional
  4. from flask_wtf import FlaskForm
  5. from wtforms import FileField, SubmitField
  6. from wtforms.validators import DataRequired
  7. from aliyun import aliyun
  8. from view.base import App
  9. oss = Blueprint("oss", __name__)
  10. app: Optional[Flask] = None
  11. class UploadForm(FlaskForm):
  12. file = FileField("选择文件", validators=[DataRequired()])
  13. submit = SubmitField("上传")
  14. @oss.before_request
  15. def check_aliyun():
  16. if aliyun is None:
  17. abort(404)
  18. return
  19. @oss.route('get/<string:name>')
  20. def get_page(name: str):
  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. abort(403)
  27. return
  28. form = UploadForm()
  29. if form.validate_on_submit():
  30. file = request.files["file"]
  31. aliyun.upload_file(file.filename, file)
  32. flash(f"文件 {file.filename} 已上传: {url_for('oss.get_page', name=file.filename, _external=True)}")
  33. return redirect(url_for("oss.upload_page"))
  34. return render_template("oss/upload.html", UploadForm=form)
  35. class OSSApp(App):
  36. def __init__(self, import_name):
  37. super(OSSApp, self).__init__(import_name)
  38. global app
  39. app = self._app
  40. app.register_blueprint(oss, url_prefix="/oss")