Неточный индикатор выполнения при загрузке больших файлов с использованием ASP.NET и Uploadify? - PullRequest
1 голос
/ 10 февраля 2010

У меня есть веб-приложение 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 вместо этого, который работает намного лучше.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2010

Это может быть проблема с вашим антивирусным программным обеспечением (в частности, AVG) и его прокси-сервером загрузки или брандмауэром. Вот связанная проблема:

Каждый флэш-загрузчик дает неверные значения прогресса

0 голосов
/ 10 февраля 2010

Ваша проблема, кажется, распространенная. Я бы попробовал http://www.swfupload.org/.

...