在模型加上文件上传的 class Post(db.Model): __tablename__ = 'post' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) file = db.Column(db.String(255)) # 文件路径或文件名,根据需求调整类型和长度 date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) comments = db.relationship('Comment', backref='post', lazy=True)
代码实现
UPLOAD_FOLDER = 'files' # 更改为你的上传文件夹路径 ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'} # 允许的文件扩展名集合 # 发送文章 @api.route("/get_essay", methods=['POST']) @login_required def post_essay(): try: if request.method != "POST": return jsonify({'code': 400, 'message': '请求错误'}) else: form = PostFrom(request.form) if form.validate(): user_id = session.get('uuid') title = form.title.data content = form.content.data file = request.files.get('file') # 获取上传的文件 if file is not None and file.filename != '' and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(UPLOAD_FOLDER, filename)) # 保存文件到指定路径 file_path = os.path.join(UPLOAD_FOLDER, filename) # 文件路径 else: file_path = None # 文件为空或不允许的类型时,将文件路径设置为 None post = Post(user_id=user_id, title=title, content=content, file=file_path) db.session.add(post) db.session.commit() return jsonify({'code': 200, 'message': '文章已发送'}) else: # 表单验证失败 errors = form.errors return jsonify({'code': 400, 'message': '表单验证失败', 'errors': errors}) except Exception as e: # 捕获其他异常 return jsonify({'code': 500, 'message': '服务器内部错误', 'error': str(e)}) def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS