Pergunta

Eu tenho uma aplicação web ASP.NET (utilizando WebForms) e estou usando Uploadify para lidar com upload arquivos grandes. Isso é feito por postar o arquivo para um HttpHandler.

Exemplo de código (simplificada para fins de demonstração):

$(".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");
    }
});

O HttpHandler que recebe o arquivo é bastante simples:

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");
}

O problema é que a barra de progresso que está sendo exibido na verdade não refletem o progresso do upload, e mostra o carregamento como sendo completa muito antes de o arquivo está realmente carregado. Portanto, a interface do usuário aparece efetivamente como ele não está fazendo nada, enquanto as estadias barra de progresso em 100%, até que o arquivo está completo.

Em alguns casos, o upload simplesmente falhar depois de chegar a 100%, com o evento OnComplete não ser demitido, quase como a resposta do HttpHandler é ficar perdido no trânsito, mesmo que o arquivo é salvo.

Eu tentei tanto Flajaxian e SWFUpload , e experimentou problemas semelhantes com a barra de progresso sendo completamente fora de sincronia com o progresso do upload real, indicando a conclusão bem antes do carregamento era realmente completa.

Este problema não é aparente ao testar localmente, ou com pequenos arquivos (tipicamente sob alguns megabytes) como estes tendem a carregar muito rapidamente e há pouco ou nenhum atraso entre o arquivo que está sendo carregado e a barra de progresso de completar.

Existe alguma maneira de usar uma solução de carregamento do Flash (como Uploadify) com uma aplicação web ASP.NET e ter a barra de progresso melhor representar o progresso real do upload?

Update: Eventualmente, eu desisti de tentar usar um carregador baseado em flash como eles parecia um pouco estranho, especialmente a barra de progresso, que não representam o progresso real do upload em tudo . Substituído isso com Brettle NeatUpload vez que funciona muito melhor.

Foi útil?

Solução

Este poderia ser um problema com o seu software anti-vírus (especificamente AVG) e seu procurador upload ou firewall. Aqui está um problema relacionado:

cada flash uploader de dar andamento mau valoriza

Outras dicas

Seu problema parece ser comum. Eu daria http://www.swfupload.org/ uma tentativa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top