Fine-uploader — как использовать в сочетании с другими полями ввода?

Я хотел бы использовать FineUploader в типичной форме:

<form enctype="multipart/form-data" method="post"">
    <input name="fileupload" type="file" ">
    <input type="text" name="title" size="45" maxlength="100">
    <textarea name="description" cols="40" rows="8"></textarea>
    <input type="hidden" name="op" value="Add">
<input type="submit" value="Upload">

Так что на самом деле я хотел бы в основном заменить часть <input name="fileupload" type="file" ">.

К сожалению, я не очень хорошо знаком с JavaScript и jQuery jet и понятия не имею, как это сделать. Я не смог найти ни одного примера кода, где FineUploader используется вместе с другими данными для отправки.

Буду признателен за любую помощь!

Спасибо, Кашуда.


person Kashuda    schedule 05.06.2013    source источник
comment
Мне нужно немного больше информации, прежде чем я смогу дать вам ответ. Во-первых, исходя из приведенного выше кода, похоже, вы хотите, чтобы пользователь мог выбрать только ОДИН файл. Это ваше намерение? Во-вторых, вы также хотите, чтобы ваши пользователи могли перетаскивать файлы для загрузки?   -  person Ray Nicholus    schedule 05.06.2013
comment
У меня есть разные области/категории, куда пользователи могут загружать файлы. Обычно они загружают только один файл. Но в одном случае мне нужно было бы загрузить два файла. Один должен быть файлом предварительного просмотра (.jpg), второй должен быть основным объектом (.zip). Перетаскивание на самом деле не требуется. Что мне нужно, так это ход загрузки и проверка типа и размера файла перед загрузкой. (Кстати, я ищу параметры jQuery)   -  person Kashuda    schedule 05.06.2013
comment
Есть несколько способов справиться с этим. В результате ваш вопрос требует достаточно сложного, развернутого ответа. Я напечатаю что-нибудь законченное в ближайшие 6-9 часов.   -  person Ray Nicholus    schedule 06.06.2013


Ответы (1)


Хотя Fine Uploader не требует jQuery (или любой другой библиотеки, если уж на то пошло), он имеет необязательную ссылку плагин jQuery. Если вы не против использования jQuery, я предлагаю вам использовать плагин jQuery, так как jQuery значительно упрощает жизнь.

Есть несколько способов снять шкуру с этой кошки. В обоих случаях формула примерно одинакова. То есть позвольте Fine Uploader обрабатывать файлы, создавать элементы ввода «на лету» для каждого отправленного файла, а затем передавать значения этих входных данных обратно в Fine Uploader непосредственно перед тем, как Fine Uploader отправит связанный файл на ваш сервер.

Вариант № 1 — режим FineUploader (с использованием встроенного пользовательского интерфейса)

Используя режим FineUploader:

<div id="myFineUploaderContainer"></div>
<button id="uploadSelectedFiles">Upload Selected Files</button>

$('#myFineUploaderContainer').fineUploader({
   request: {
      endpoint: '/my/upload/endpoint'
   },
   autoUpload: false
})
   .on('submitted', function(event, id, name) {
      var fileItemContainer = $(this).fineUploader('getItemByFileId', id);

      $(fileItemContainer)
         .prepend('<input type="text" name="name">')
         .append('<input type="text" name="description">');
   })
   .on('upload', function(event, id, name) {
      var fileItemContainer = $(this).fineUploader('getItemByFileId', id),
          enteredName = $(fileItemContainer).find('INPUT[name="name"]').val(),
          enteredDescr = $(fileItemContainer).find('INPUT[namme="description"]').val();

      $(this).fineUploader('setParams', {name: enteredName, description: enteredDescr}, id);
   });

$('#uploadSelectedFiles').click(function() {
   $('#myFineUploaderContainer').fineUploader('uploadStoredFiles');
});

Вам, вероятно, потребуется добавить к приведенному выше коду в соответствии с вашими потребностями и добавить CSS, где это необходимо, но это начало в правильном направлении. Выше вы ждете, пока Fine Uploader перезвонит вам, когда он добавит элемент списка в DOM, представляющий выбранный файл. Когда вы получаете этот обратный вызов, вы добавляете элемент ввода текста в начало элемента списка (для введенного пользователем имени) и еще один в конец элемента списка (для введенного пользователем описания. Затем, непосредственно перед Fine Uploader отправляет файл на ваш сервер, он вызывает обработчик события загрузки, где вы считываете значения входных элементов и передаете их Fine Uploader, связывая их с файлом через идентификатор файла. Fine Uploader будет включать эту информацию вместе с файл в закодированном из нескольких частей POST-запросе, который он отправит на ваш сервер.

Обработчик кликов даст сигнал Fine Uploader отправить файлы на ваш сервер. Ваш пользователь нажмет на нее после того, как выберет все файлы и заполнит поля ввода соответствующим образом. Обычно Fine Uploader отправляет файлы на сервер сразу после их выбора, но это можно изменить, переключив параметр autoUpload. В вашей ситуации имеет смысл отключить автоматическую загрузку.

Использование режима FineUploader означает, что вам не нужно слишком беспокоиться о пользовательском интерфейсе, поскольку большая часть этого была сделана за вас, и вы бесплатно получаете функцию перетаскивания, а также индикаторы выполнения и другие полезные функции пользовательского интерфейса.

Вариант №2 — режим FineUploaderBasic (создайте свой собственный пользовательский интерфейс)

Второй вариант — использовать базовый режим FineUploader. Это дает вам максимальный контроль над вашим пользовательским интерфейсом, но требует большей работы, поскольку вам нужно будет полностью создать свой собственный пользовательский интерфейс. Это означает, что вам нужно будет использовать большинство обратных вызовов, чтобы создать свой пользовательский интерфейс и синхронизируйте его с внутренним состоянием Fine Uploader и связанных файлов.

Например, если вам нужны индикаторы выполнения, вам нужно будет отобразить их самостоятельно и обновить на основе информации, периодически передаваемой вам через обработчик обратного вызова onProgress, вызываемый Fine Uploader. Все это хорошо и, возможно, предпочтительнее в некоторых случаях, если вы хорошо разбираетесь в javascript, HTML и CSS. Однако, если вы этого не сделаете, вы можете попробовать использовать режим FineUploader.

Режим FineUploaderBasic не включает встроенную поддержку перетаскивания, но вы можете легко интегрировать автономный модуль перетаскивания файлов Fine Uploader, если хотите.

person Ray Nicholus    schedule 06.06.2013
comment
ХОРОШО. Спасибо вам за этот исчерпывающий ответ. Мне до сих пор не ясны три вещи: 1.) Если пользователь решает изменить файл, который он хочет загрузить, ПОСЛЕ того, как он заполнил все остальные поля ввода, эти поля очищаются, так как действие onSubmit вызывается снова. 2.) Как мне добавить вторую кнопку загрузки для предварительного просмотра? 3.) Как загрузить новую страницу после успешной загрузки? - person Kashuda; 06.06.2013
comment
1) Непонятно, как работает этот загрузчик. Я предлагаю вам попробовать мой ответ. Всего один загрузчик для всех файлов. 2) зачем вам две кнопки загрузки? Опять же, я не думаю, что вы понимаете, как это работает. Не должно быть необходимости в двух кнопках, достаточно одной кнопки для всех файлов. 3) Загрузите новую страницу в полный обработчик после того, как все файлы полностью завершили обсуждение. Подробности смотрите в документации. - person Ray Nicholus; 06.06.2013