У меня есть веб-приложение ASP.NET (использующее веб-формы), и я использую Uploadify для обработки загрузки больших файлов. Это делается путем отправки файла в HttpHandler.
Пример кода (упрощено для демонстрационных целей):
$(".uploadify").uploadify({
'uploader': '/uploadify/uploadify.swf',
'script': 'SaveUploadedFile.ashx',
'cancelImg': '/uploadify/cancel.png',
'queueID': 'fileQueue',
'auto': true,
'multi': false,
'method': 'post',
onSelect: function(e, queueId, file) {
alert(file.name + " selected");
},
onComplete: function(e, queueId, file, response, data) {
alert("complete: " + response);
},
onCancel: function(e, queueId, file, data) {
alert("cancel");
}
});
HttpHandler, который получает файл, довольно прост:
public void ProcessRequest(HttpContext context)
{
Debug.WriteLine("Save file");
if (context.Request.Files.Count == 0)
throw new SystemException("No files uploaded");
// Get the file
HttpPostedFile file = context.Request.Files.Get(0);
Debug.WriteLine("Got file: " + file.FileName + ", Length: " + file.ContentLength);
// Save it
string guid = Guid.NewGuid().ToString();
string path = Path.Combine(Path.GetTempPath(), guid + ".tmp");
file.SaveAs(path);
Debug.WriteLine("Saved to path: " + path);
// Update response and return guid
context.Response.StatusCode = 200;
context.Response.Write(guid);
Debug.WriteLine("All Done");
}
Проблема в том, что отображаемый индикатор выполнения на самом деле не отражает ход загрузки, а показывает, что загрузка завершена задолго до того, как файл действительно был загружен. Следовательно, пользовательский интерфейс фактически выглядит так, как будто он ничего не делает, пока индикатор выполнения остается на уровне 100%, пока файл не будет завершен.
В некоторых случаях загрузка просто завершается неудачно после достижения 100%, при этом событие OnComplete никогда не срабатывает, почти как ответ от HttpHandler теряется при передаче, даже если файл сохраняется.
Я пробовал оба Flajaxian и SWFUpload , и испытывал похожие проблемы с тем, что индикатор выполнения полностью не синхронизирован с фактическим прогрессом загрузки, указывая на завершение задолго до того, как загрузка была фактически полный.
Эта проблема не проявляется при локальном тестировании или при работе с небольшими файлами (обычно размером менее нескольких мегабайт), поскольку они, как правило, загружаются довольно быстро, и между загружаемым файлом и завершением индикатора выполнения есть небольшая или нулевая задержка.
Можно ли использовать решение для загрузки Flash (например, Uploadify) с веб-приложением ASP.NET, и индикатор выполнения лучше отображает фактический процесс загрузки?
Обновление: В конце концов, я прекратил попытки использовать загрузчик на основе флэш-памяти, поскольку они казались немного неуклюжими, особенно индикатор выполнения, который вообще не отображал фактический прогресс загрузки. Заменил это на Brettle NeatUpload вместо этого, который работает намного лучше.