2012-06-14 5 views
0

Может загружать форму submit wait для завершения обработки файлов?Может ли отправить форму отправки в ожидании завершения обработки файлов?

Я использую 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] 

В то время цикла, вы можете также проверить на наличие ошибок в процессе кодирования и прервать вставку (и вернуть сообщение об ошибке) в этом случае.

Примечание: 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

Смежные вопросы