2012-06-14 22 views
0

可以上傳表單提交等待文件處理完成嗎?可以上傳表單提交等待文件處理完成嗎?

我正在使用web2py及其sqlform上傳視頻,同時將視頻轉換爲flv。上傳和編碼的進度通過兩個進度條使用此代碼顯示(http://www.web2pyslices .COM /片/顯示/ 1337 /上傳正在進行合的web2py)。一旦檢測到視頻上傳,編碼就從後端開始。編碼和轉換完成後,用戶可以播放轉換後的視頻。

問題是當上傳完成但編碼不完整時接受的表單。我嘗試了event.preventDefault(),但進度條不顯示。似乎默認的提交在上傳完成時無法停止。如何防止提交併等待轉換過程完成並執行提交呢?謝謝!

回答

1

您可以在不執行數據庫插入的情況下驗證表單(請參閱here)。然後在驗證之後,運行一個循環來持續檢查編碼是否完成,一旦編碼完成,就執行數據庫插入並返回。

def video_upload(): 
    upload_form = SQLFORM(db.encodeupload) 
    if upload_form.validate(): 
     session._unlock(response) 
     [while loop checking to see if file encoding is complete] 
     db.encodeupload.insert(**db.encodeupload._filter_fields(form.vars)) 
    [rest of code] 

在while循環,你可能也檢查錯誤在編碼過程和中止插入(並返回一個錯誤消息)在這種情況下。

注意,session._unlock(response)在進入循環之前解鎖會話文件 - 這是必要的,因此鎖定的會話文件不會阻止頁面爲更新編碼進度條而發出的Ajax請求。在由Ajax請求調用的控制器操作中,還應該添加session.forget(response),以便操作不鎖定或寫入會話。

+0

謝謝你的答覆。我試過這個和行db.encodeupload.insert(** form.vars)發生錯誤:字段video_newfilename不屬於表。我猜video_newfilename是編碼後上傳的文件的名稱(根據web2py自動獲得上傳文件的原始名稱並編碼成新文件名)。我沒有介入這個過程。爲什麼這個錯誤? – Treper

+0

對不起,form.vars必須先過濾,因此它只包含屬於表中的字段 - 我更正了上面的代碼來執行此操作。在書中,例如,如果顯示[這裏](http://web2py.com/books/default/chapter/29/7#One- form-for-multiple-tables)。 – Anthony