flask--文件上传项目应用

在模型加上文件上传的
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
  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值