2014-10-30 67 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')

相關問題