2011-09-23 47 views
0

我在我的MVC 3.0應用程序中使用'Uploadify'Jquery插件來上傳多個文件。 它的工作正常,但顯示上傳失敗的文件列表。通過'Uploadify'跟蹤成功上傳的文件名Jquery插件

如何跟蹤成功上傳的文件名?

我的腳本是這樣的:

<link href="@Href("~/Content/uploadify.css")" rel="stylesheet" /> 
    <script src="@Href("~/Scripts/jquery-1.4.1.js")" type="text/javascript"></script> 
    <script src="@Href("~/Scripts/jquery.uploadify.js")" type="text/javascript"></script> 

<script type="text/javascript"> 
    $(window).load(
    function() { 
     $("#fileuploader").fileUpload({ 
      'uploader': '/Scripts/uploader.swf', 
      'cancelImg': '/Images/cancel.png', 
      'buttonText': 'Select Image', 
      'script': 'Home/Upload', 
      'folder': '/uploads', 
      'fileDesc': 'Image & XML Files', 
      'fileExt': '*.jpg;*.jpeg;*.gif;*.png;*.xml', 
      'multi': true, 
      'auto': true 
     }); 
    } 
); 
    </script> 

我的HTML代碼:

<div id="fileuploader"></div> 
<div>Upload Status</div> 
Successful Files : <div> @TempData["SuccessfulFileList"]</div> 
Failed Files :<div> @TempData["FailedFileList"]</div> 

的控制器代碼是這樣的:

 private static List<string> _successfulFileList = new List<string>(); 
     private static List<string> _failedFileList = new List<string>(); 

     public string Upload(HttpPostedFileBase fileData) 
     { 
      try 
      { 
       var fileName = this.Server.MapPath("~/uploads/" + System.IO.Path.GetFileName(fileData.FileName)); 
       fileData.SaveAs(fileName); 
       _successfulFileList.Add(fileName); 
      } 
      catch 
      { 
       var failedFileName = fileData.FileName; 
       _failedFileList.Add(failedFileName); 
      } 

      TempData["SuccessfulFileList"] = _successfulFileList; 
      TempData["FailedFileList"] = _failedFileList; 
      return "Some Files Get uploaded"; 
     } 
+0

到TempData是沒有得到印在我的UI。 – Biki

+0

你有沒有調試過,看看'_successfulFileList'和'_failedFileList'實際包含了什麼? – Jack

+0

由於它們是靜態的,我可以發現只有_successfulFileList被填充,但即使它們存儲在tempdata中,它們也不會在我的cshtml中可見。 – Biki

回答

0

您使用Flash組件上傳文件(Uploadify)。 Flash組件不發送cookie。會話由cookies進行跟蹤。 TempData使用會話。結論=>您無法將FlashData用於Flash客戶端。有some ugly workarounds

這就是說,使用控制器中的靜態列表來存儲上傳的文件是非常危險的,因爲List<T>對象不是線程安全的,如果你有2個用戶並行上傳他們的文件,你的應用程序可能會崩潰。

作爲一種替代方案,您可以將上傳文件的列表存儲到您的數據存儲庫(數據庫或其他東西),並從那裏取回,而不是依賴會話。

+0

默認情況下不會uploadify使用html5,然後降級爲flash? –

+0

但我看到執行流程也不一致。這是由於Flash組件還是由於其異步本質?這些列表只保存最後一個成功的文件或不成功的文件,如果它們不是靜態的。如何解決這個問題? – Biki