如何使用Flask从服务器删除文件

10 投票
2 回答
26843 浏览
提问于 2025-04-30 13:42

当我用这个功能上传文件时:

@app.route('/add_item', methods=['GET', 'POST'])
@login_required
def new_item():
    error = None
    form = AddItemForm(request.form)
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename) and form.name.data != "" and form.description.data != "":
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOADED_ITEMS_DEST'], filename))
            new_item = Item(
                filename,
                form.name.data,
                form.description.data,
                form.price.data,
                form.age.data,
                form.particles.data,
                form.category.data,
                '1',
                )
            db.session.add(new_item)
            db.session.commit()
            return redirect(url_for('admin_items'))
        else:
            return render_template('admin_items.html', form=form, error=error)
    if request.method == 'GET':
        return redirect(url_for('admin_items'))

我该如何用删除项目的功能来删除这个上传的文件呢?问题是,我现在的功能只删除了项目的内容(比如描述、价格等),但实际上传到文件夹里的文件并没有被删除!这就造成了问题!

这是我的删除功能:

# Delete Items:
@app.route('/delete_item/<int:item_id>/', methods=['GET', 'POST'])
@login_required
def delete_item(item_id):
    new_id = item_id
    os.remove(os.path.join(app.config['UPLOADED_ITEMS_DEST'], filename))
    db.session.query(Item).filter_by(item_id=new_id).delete()
    db.session.commit()

    return redirect(url_for('admin_items'))
暂无标签

2 个回答

-4

你可以在Python中运行命令

比如,你可以用这个命令来删除一个文件:os.system('rm 要删除的文件名')

21
@app.route('/delete_item/<int:item_id>/', methods=['GET', 'POST'])
@login_required
def delete_item(item_id):
    new_id = item_id
    item = self.session.query(Item).get(item_id)
    os.remove(os.path.join(app.config['UPLOADED_ITEMS_DEST'], item.filename))
    self.session.delete(item)
    db.session.commit()
    return redirect(url_for('admin_items'))

当然,你应该实现合适的错误捕捉。可以看看这个链接:

https://github.com/dpgaspar/Flask-AppBuilder/blob/master/flask_appbuilder/models/sqla/interface.py#L366

撰写回答