2014-10-30 49 views
0

当我使用此功能上传文件:如何删除服务器上的文件与瓶

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

而os.remove(os.path.join(的app.config [ 'UPLOADED_ITEMS_DEST'],文件名))不工作? – Beri 2014-10-30 07:29:00

+0

我已经插入了我的删除功能。但是因为我不是sqlalchemy的expirienced用户,我不知道如何从数据库中获取“filename”的值给这个函数! :(除非发现 - 函数不起作用 – 2014-10-30 11:12:33

回答

3
@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

+0

非常感谢!这有帮助,但是我已经将自变量变成了db,因为有一个错误提示自变量没有被定义。 – 2014-10-31 05:51:03

-1

你可以在Python运行命令

使用os.system( 'RM THE_FILE_TO_DELETE')

相关问题