Как получить загруженные файлы после отправки формы с помощью uploadify?

#php #javascript #jquery #file-upload #uploadify

#php #javascript #jquery #файл-загрузка #uploadify

Вопрос:

Вопрос:

У меня есть форма с текстовым полем, просмотром файлов (uploadify) и кнопкой отправки. Я отправляю эту форму через AJAX. Когда я выбираю файл с помощью файлового браузера, он автоматически загружается в папку, определенную для параметра папки. Теперь, после отправки формы, я хочу сохранить данные в базе данных. Я могу получить данные других полей после публикации, но не могу получить загруженные файлы. Я хочу, чтобы массив загруженных файлов в $_POST после отправки формы выглядел следующим образом:

 $_POST( 'fullname'=>'ABC', 'uploaded_files' => array( '/uploads/abc.doc', '/uploads/xyz.doc' ) );
  

Как это возможно?

Пока у меня есть следующая реализация.

jQuery:

 jQuery('.FileUpload').uploadify({
        'uploader'  : '/uploadify/uploadify.swf',
        'script'    : '/uploadify/uploadify.php',
        'cancelImg' : '/uploadify/cancel.png',
        'folder'    : '/uploads',
        'auto'      : true,
        'queueID'   : 'fileQueue',
        'removeCompleted':false
      }); 
  

HTML:

 <form action='save.php' method='POST' enctype='multipart/form-data'>

Name: <input type='text' name='fullname' id='fullname'>

Source File: <input type='file' name='photos' id='photos' class='FileUpload'>
<div id="fileQueue"></div>

<input type='submit' name='submit' id='submit'>

</form>
  

Ответ №1:

Используя javascript, вы можете добавить некоторые входные данные в свою форму для отслеживания загруженных файлов. Например, вы можете поместить:

 <input type='hidden' name='files[]' value="FILENAME1">
<input type='hidden' name='files[]' value="FILENAME2">
<input type='hidden' name='files[]' value="FILENAME3">
  

Комментарии:

1. Это означает, что всякий раз, когда я загружаю файл с помощью uploadify, я должен добавлять скрытое поле в форму с именем файла с помощью jquery??

2. @Студент Да. Это одно из возможных решений.

3. Я попробовал это. Я добавлял скрытое поле каждый раз, когда загружал файл, используя опцию onCompelete. Но когда я отправляю форму, эти скрытые поля неправильно отображаются в zend form. Я получаю значения формы в zend с помощью $form->getValues(); . Проблема в том, что zend не учитывает динамически добавляемые значения в форму. Однако я могу получить эти значения, используя $_POST , но это не идеально. Есть ли какое-либо другое решение.. Спасибо

Ответ №2:

Помните, что uploadify имеет onComplete событие, которое может вернуть данные обратно из вашего 'script' параметра.

Итак, когда uploadify передает файл, вы можете заставить скрипт вернуть путь к файловому хранилищу, а затем извлечь / сохранить его в вашей форме на основе того, что было передано обратно в onComplete событии. (Это будет ответная часть onComplete обратного вызова)

Оттуда вы можете заполнить скрытые поля формы, которые они отправляют вместе с формой (как продемонстрировала AurelioDeRosa) и заполнить значениями ответа.

Комментарии:

1. Спасибо за ваш ответ.. Я попробовал это. Я добавлял скрытое поле каждый раз, когда загружал файл, используя опцию onCompelete. Но когда я отправляю форму, эти скрытые поля неправильно отображаются в zend form. Я получаю значения формы в zend с помощью $form->getValues(); . Проблема в том, что zend не учитывает динамически добавляемые значения в форму. Однако я могу получить эти значения, используя $_POST , но это не идеально. Есть ли какое-либо другое решение.. Спасибо

2. @Student: я не уверен на 100% в zend, но вы могли бы жестко запрограммировать / предварительно определить скрытые поля, а затем просто настроить их при необходимости. (т.Е. Если uploadify разрешено загружать максимум 10 файлов, создайте 10 скрытых полей «заполнителей», которые вы можете заполнить в виде файловдобавляются в очередь загрузки, которую вы можете заполнить по onComplete мере получения значений.)

3. @Student: немного запутанный, но возможный обходной путь. Вероятно, есть лучший способ, но (как я уже сказал) Я не уверен на 100% в методе, использующем zend; Я склонен придерживаться nuts-n-bolts php и $ _POST .

4. Да, вы правы. Я могу добавить эти скрытые поля в форму zend. Но если у нас есть ограничение на 10 файлов для загрузки, мы должны создать 10 скрытых полей в zend form. Это выглядит дополнительной работой.. Может быть, я найду другое лучшее решение.. Спасибо…

5. Проблема решается с помощью $request->getPost(); вместо $form->getValues(); …. $request->getPost(); также получает значения динамически добавляемых элементов…