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

10

当我使用这个函数上传文件时:

@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'))

而os.remove(os.path.join(app.config['UPLOADED_ITEMS_DEST'], filename))无法工作吗? - Beri
我已经插入了我的删除函数。但由于我不是熟练的SQLAlchemy用户,我不知道如何从数据库中获取“filename”的值传递给这个函数! :( 如果没有找到它,该函数将无法工作。 - Anatoliy Fedorenko
2个回答

20

非常感谢!这很有帮助。但是我已经将self全局变量改为db。因为会出现一个错误,说self全局变量未定义。 - Anatoliy Fedorenko
应使用 Flask 的 safe_join 函数来防止目录遍历漏洞。 - Stephen Eckels

-4

你可以在Python中运行命令

os.system('rm THE_FILE_TO_DELETE')


2
这会使您的系统容易受到远程执行命令攻击的威胁。 - Higor E.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接