2010-04-04 4 views
1

Просто интересно, можно ли получить статус запроса с другого запроса?ASP.net MVC - Проверить запрос статуса

Чтобы обеспечить некоторый контекст, я хочу использовать ajax для загрузки некоторых файлов на сервер. Когда загрузка запускается, я хочу запустить другой запрос ajax, который проверяет, сколько загружено файла (или, другими словами, насколько большим был другой запрос и насколько далеко он получил запрос от сервера).

Я думал, что могу использовать руководство или что-то подобное, чтобы убедиться, что я проверяю статус правильного запроса. Но как я могу проверить статус другого запроса ???

Приветствия Энтони

ответ

0

Вы, вероятно, захотите взглянуть на implementing Asynchronous requests in ASP.NET MVC, или что-то подобное.

+0

Я не думаю, что это правильно, потому что время, затраченное на загрузку, не является обработкой данных, как только данные принесли на сервер его отправку данных на сервер. Насколько я знаю, это происходит задолго до того, как может использоваться асинхронная логика запросов ASP.NET MVC. – vdhant

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

+0

Просто интересно, если у вас были какие-то мысли по этому поводу? – vdhant

+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 –

 Смежные вопросы

  • Нет связанных вопросов^_^