2016-03-18 60 views
0

我正嘗試從ajax請求上傳圖像。在行動中,我必須爲這些圖像保存4種不同的尺寸。用異步處理上傳多個圖像

我想在當前線程中只保存一個,並在另一個線程中保存3個圖像,以便用戶不必等待上傳所有圖像,因爲我只需要第一個圖像的路徑。

這是我迄今爲止所做的。

[HttpPost] 
public JsonResult UploadImage(bool isUploadLogo = false) 
{ 
     HttpPostedFileBase file = Request.Files["UploadedImage"]; 
     if (file != null) 
     { 
      var getExt = Path.GetExtension(file.FileName).ToLower(); 
      var getBytesArray = ResizeImage.ConvertToByte(file); 
      string fileName = "TestImage" + DateTime.Now.Ticks.ToString() + getExt; 
      var smallSizeImageBytes = ResizeImage.ResizeImageBytes(200, 200, getBytesArray, getImageFormat); 
      var pic = ImageStore.UploadImage(fileName, file.ContentType, smallSizeImageBytes); 

      //Save Slider Image, Without Wait 
      if (!isUploadLogo) 
      { 
       new Thread(() => 
       { 
        UploadSliderImage(getBytesArray); 
       }).Start(); 
      } 
      var result = new 
      { 
       url = "Folder Path Here" + fileName,   
       isSuccess = "true" 
      }; 
      return Json(result, "text/plain", JsonRequestBehavior.AllowGet); 
     } 
} 

public void UploadSliderImage(byte[] CroppedImage) 
{ 
    //Code for upload diffrent size images 
} 

雖然我打電話UploadSliderImage另一個線程內,但在客戶端我沒有得到結果,直到UploadSliderImage過程完成。

如何在不等待上傳剩餘圖像的情況下將數據返回到客戶端。

回答

0

我認爲使用Task代替Thread類會更好,假設您使用.net 4.0及以上版本。以下是您可以基於的示例代碼。它會立即返回Json而不完成任務。

 Debug.WriteLine("Image Upload"); 

     Task tsk = new Task(() => 
     { 
      Thread.Sleep(5000); //This is your UploadSlider Image 
      Debug.WriteLine("Done"); 

     }); 
     tsk.Start(); 

     return Json("result", JsonRequestBehavior.AllowGet); 
+0

它不會影響總時間。我正在瀏覽器控制檯中檢查它。此前它需要大約800毫秒,仍然是在同一時間。這等於總時間上傳圖片而不使用'Task' –

+0

您是否嘗試過調試?返回Json將在Debug.WriteLine(「完成」)之前被調用; –

+0

是的。你是對的。在'Debug.Writeline'之前調用'return'語句。但不知道爲什麼它採取同一時間。 –