2010-04-04 52 views
1

只是想知道是否有可能從另一個請求獲取請求的狀態?ASP.net MVC - 檢查狀態請求

爲了幫助提供一些上下文,我想使用ajax將一些文件上傳到服務器。當上傳開始時,我想觸發另一個Ajax請求,檢查是否已上傳了多少文件(換句話說,其他請求有多大,以及通過接收請求的距離是多遠)。

我在想我可以使用guid或類似的東西來確保我正在檢查正確請求的狀態。但是,如何檢查另一個請求的狀態?

乾杯 安東尼

回答

0

你可能想看看implementing Asynchronous requests in ASP.NET MVC,或者類似的東西。

+0

我不認爲這是正確的,因爲上載所花費的時間並不是數據處理完成後,數據已經到達服務器,而是將數據發送到服務器。據我所知,這發生在異步請求邏輯ASP.NET MVC可以使用之前。 – vdhant 2010-04-04 03:44:43

1

這絕對有可能。據我所知,沒有內置的支持檢查ASP.NET MVC中另一個請求的狀態,但實現起來並不困難。

public static UploadStatusHelper { 
    static Dictionary<string, int> uploads = new Dictionary<string, int>(); 
    static object lockObj = new object(); 

    public static void SetStatus(string key, int bytesComplete) { 
     lock(lockObj) { 
      uploads[key] = bytesComplete; 
     } 
    } 

    public static void GetStatus(string key) { 
     lock(lockObj) { 
      int bytesComplete = 0; 
      if(uploads.TryGetValue(key, out bytesComplete) { 
       return bytesComplete; 
      } 
      return 0; 
     } 
    } 
} 

當你讀過的服務器上上傳文件的塊,你會打電話

UploadStatusHelper.SetStatus(theKey, bytesRead); 

然後使用使用Ajax可以定期發起HTTP POST請求到返回的動作進步,例如

[HttpPost] 
public ActionResult GetProgress(string key) 
    int bytesRead = UploadStatusHelper.GetStatus(key); 
    return Json(new { bytesRead = bytesRead }); 
} 

你可能想擴展這個幫手來存儲文件的總長度,並返回一個完成百分比,但這只是意味着向您展示如何可以做到。

+0

當你說「當你讀到服務器上的一個上傳文件的塊時,你會打電話給你」你是說這會在行動?如果是這種情況,據我所知,只有在接收到所有數據時纔會調用該操作。因此,SetStatus呼叫將放置在哪裏? – vdhant 2010-04-04 13:55:25

+0

只是想知道你是否對此有任何想法? – vdhant 2010-04-05 00:20:10

+0

是的,你是完全正確的 - 只有收到所有數據後纔會執行正常的操作。可能你可以使用AsyncController來解決這個問題,雖然我還沒有嘗試過。我自己去了一個自定義的IHttpHandler。無論哪種方式,您都需要查找或編寫一些代碼來分析塊中的多部分表單數據並設置上傳狀態,然後還有所有JavaScript。 PITA! 你有沒有看到這個問題的一些可能的選擇? http://stackoverflow.com/questions/977995/how-can-i-upload-a-file-via-asp-net-mvc-and-show-a-progress-bar – 2010-04-07 04:21:36