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

StackOverflow https://stackoverflow.com/questions/2239881

Вопрос

У меня есть веб-приложение ASP.NET (с использованием WebForms), и я использую Загрузить для обработки загрузки больших файлов.Это делается путем отправки файла в 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 теряется при передаче, даже если файл сохранен.

Я попробовал оба Фладжаксиан и SWFЗагрузить, и столкнулись с аналогичными проблемами: индикатор выполнения полностью не синхронизировался с фактическим ходом загрузки, указывая на завершение задолго до того, как загрузка была фактически завершена.

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

Есть ли какой-либо способ использовать решение для загрузки Flash (например, Uploadify) с веб-приложением ASP.NET и сделать так, чтобы индикатор выполнения лучше отражал фактический ход загрузки?

Обновлять: В конце концов я отказался от использования флеш-загрузчика, поскольку он показался мне слишком неудобным, особенно индикатор выполнения, который вообще не отражал фактический прогресс загрузки.Заменил это на Brettle NeatЗагрузить вместо этого это работает намного лучше.

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top