Imprecisas barra de progresso ao fazer upload de grandes arquivos usando ASP.NET e Uploadify?
-
19-09-2019 - |
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.
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:
Outras dicas
Seu problema parece ser comum. Eu daria http://www.swfupload.org/ uma tentativa.