plupload очередь проверки файлов при отправке формы имеет проблему

У меня проблема с запуском uploader.start() в случае, если кнопка запуска не нажата для загрузки файла, я использую последнюю версию Plupload. вот полный код, и я хочу найти временные имена, данные для каждого файла, загруженного при нажатии кнопки «Отправить», чтобы я мог перейти на сервер и переименовать файлы со ссылочным идентификатором, который упрощает идентификацию файла, который принадлежит.

     <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <link href="Styles/jquery.plupload.queue.css" rel="stylesheet" type="text/css" />
    <script src="Script/jquery-1.8.2.js" type="text/javascript"></script>
    <script src="Script/FileUpload/plupload.full.js" type="text/javascript"></script>
    <script src="Script/FileUpload/jquery.plupload.queue.js" type="text/javascript"></script>
    <title>Test Page</title>
    <script type="text/javascript">
        $(document).ready(function () { 
          $("#Testloader").pluploadQueue({
              runtimes: 'flash',
              url: 'FileUpload.ashx',
              max_file_size: '100mb',
              urlstream_upload: true,
              chunk_size: '5MB',
              //unique_names: false,
              multiple_queues: true,

              filters: [
            { title: "Document files", extensions: "pdf,doc,docx,tiff" },
            { title: "Image files", extensions: "jpg,png" }
        ],
              // Flash settings
              flash_swf_url: 'Images/plupload.flash.swf',

              //                    // Silverlight settings
              //                    silverlight_xap_url: 'assets/resources/plupload.silverlight.xap',

              init: {
                  FileUploaded: function (up, file, info) {
                  },                 
                  FilesRemoved: function (up, files) {
                      plupload.each(files, function (file) {

                      });
                  }
              }

          });
      });
      $('form').submit(function (e) {
          alert("clicked me");
          var uploader = $("#Testloader").pluploadQueue();
          // Files in queue upload them first
          if (uploader.files.length > 0) {
              // When all files are uploaded submit form
              uploader.bind('StateChanged', function () {
                  if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
                      // $('form')[0].submit();
                      alert("Form submitted");
                  }
              });
              uploader.start();

          } else {

              alert('You must queue at least one file.');

          }
          return false;
      });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="Testloader">      
    </div>
   <input type="submit" value="send" />
    </form>
</body>
</html>

person Jay    schedule 25.11.2012    source источник
comment
Пожалуйста, не могли бы вы объяснить временные имена? (И, возможно, весь ваш процесс формирования) Чего вы хотите достичь, не ясно. На самом деле, при отправке формы plupload проверяет, есть ли еще файлы в очереди. Если это так, plupload откладывает отправку формы до тех пор, пока все файлы не будут загружены. Затем он отправляет форму.   -  person jbl    schedule 26.11.2012
comment
Временные имена — это не что иное, как временное имя для загружаемых файлов. Я получил это, указав уникальные имена и сохранив эти имена на стороне клиента в хеш-таблице, а затем при нажатии кнопки отправки отправив массив в веб-метод и переименовав все загруженные файлы с идентификатором ссылки. Я согласен, что в plupload есть проверка события отправки формы, но это именно то место, где я точно сталкиваюсь с ошибкой javascript. uploader.files.length --- строка говорит, что длина не определена... в экземпляре формы отправки plupload не происходит, если это так, свойство length может иметь проблему.. Пожалуйста, укажите на проблему   -  person Jay    schedule 27.11.2012


Ответы (1)


Во-первых, вы должны переместить привязку отправки внутрь $(document).ready, чтобы убедиться, что DOM готов к привязке отправки.

Я предполагаю, что вы должны попытаться положиться на закрытие, чтобы гарантировать, что «загрузчик» правильно связан во время StateChanged (вы также можете начать свой обработчик StateChanged с var uploader = $("#Testloader").pluploadQueue();) :

  $('form').submit(function (e) {
      alert("clicked me");
      var uploader = $("#Testloader").pluploadQueue();
      // Files in queue upload them first
      if (uploader.files.length > 0) {
          // When all files are uploaded submit form
          uploader.bind('StateChanged', (function(closedUploader){return function () {
              if (closedUploader.files.length === (closedUploader.total.uploaded + closedUploader.total.failed)) {
                  // $('form')[0].submit();
                  alert("Form submitted");
              }
          };})(uploader)
          );
          uploader.start();

      } else {

          alert('You must queue at least one file.');

      }
      return false;
  });

Надеюсь, это поможет

person jbl    schedule 27.11.2012