2012-11-25 55 views
3

如果啓動按鈕沒有被點擊用於文件上傳,我使用的是最新版本的Plupload,我在解決uploader.start()問題時遇到了問題。這裏是完整的代碼,我希望找到每個上傳的文件的臨時名稱,這樣我就可以進入服務器並使用引用ID重命名這些文件,這樣可以很容易地識別出屬於哪個文件。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> 
+0

請,你能解釋一下 「臨時名稱」? (也許你的整個表單過程)你想實現的目標還不清楚。 實際上,在表單提交後,plupload會檢查隊列中是否還有文件。如果是這樣,plupload延遲表單提交,直到所有文件已上傳。然後它提交表單。 – jbl

+0

臨時名稱只是上傳文件的臨時名稱。我通過給出唯一名稱並將這些名稱存儲在客戶端的哈希表中,然後在提交時單擊將該數組發送到webmethod並使用參考ID重命名所有上傳的文件來獲得此名稱。我同意plupload在提交表單事件上有一個檢查,但這是我感到興奮的JavaScript錯誤的地方。 uploader.files.length ---行說長度未定義...在plupload的提交表單事件實例沒有發生,如果是這樣,長度屬性可能有問題..請指出問題 – Jay

回答

2

首先,您應該移動$(document).ready內的提交綁定,以確保DOM已準備好提交綁定。

我想你應該嘗試依靠封閉,以保證「上傳」 StateChanged中正確綁定(你也可以使用var上傳= $(「#Testloader」)開始你的StateChanged處理器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; 
    }); 

希望這將有助於

+0

非常感謝,它的工作。我做的錯誤是指向正確.. – Jay