2010-02-10 3 views
1

ASP.NET 웹 응용 프로그램 (WebForms 사용)이 있고 큰 파일 업로드를 처리하기 위해 Uploadify을 사용하고 있습니다. 이것은 HttpHandler에 파일을 게시하여 수행됩니다. (데모 단순화) 코드ASP.NET과 Uploadify를 사용하여 대용량 파일을 업로드 할 때 진행 막대가 정확하지 않습니까?

예 :

$(".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 %로 유지되는 동안 아무 것도하지 않는 것처럼 사용자 인터페이스가 효과적으로 나타납니다.

경우에 따라 파일이 저장되어 있어도 HttpHandler의 응답이 전송 중에 손실되는 것과 거의 같은 OnComplete 이벤트가 발생하지 않고 업로드가 100 %에 도달하면 실패합니다.

FlajaxianSWFUpload 두 가지 모두 시도해 보았습니다. 진행률 표시 줄이 실제 업로드 진행과 완전히 동기화되지 않아서 업로드가 실제로 완료되기 훨씬 전에 완료되었음을 나타내는 유사한 문제가 발생했습니다.

이 문제는 로컬에서 테스트하거나 작은 파일 (일반적으로 몇 메가 바이트 미만)을 사용할 때 분명하지 않습니다. 이러한 파일은 상당히 빠르게 업로드되는 경향이 있으며 업로드되는 파일과 진행률 표시 줄 사이에 지연이 거의 없거나 전혀 없습니다.

Uploadify와 같은 Flash 업로드 솔루션을 ASP.NET 웹 응용 프로그램과 함께 사용할 수 있으며 진행률 막대가 업로드의 실제 진행 상태를보다 잘 나타내도록 할 수 있습니까?

업데이트 : 결국 업로드의 실제 진행 상황을 나타내지 않는 진행률 막대와 같이 너무 어색한 것으로 보였으므로 플래시 기반 업 로더 사용을 포기했습니다. 대신 이것을 훨씬 더 잘 작동하는 Brettle NeatUpload으로 바 꾸었습니다.

+0

가 인식 지연가 : 여기에 관련된 문제입니까? 대용량 파일 업로드의 경우 web.config에서 세션 시간 초과를 증가 시켰습니까? 하나의 옵션은 여기에 보이는 페이스 북 막대와 같이 100 % 후에 다른 진행률 표시 줄로 전환하는 것입니다. http://www.ajaxload.info/ –

+0

@Todd - 디버그 메시지는 업로드가 완료 될 때까지 페이지가 히트되지 않음을 나타냅니다 , 문제는 모든 사후 업로드 처리와 같이 보이지 않습니다. 세션 시간 초과 및 최대 요청 크기 설정은 이미 증가했지만이 문제와 관련이없는 것 같습니다. – Mun

+0

응용 프로그램 풀이 재활용되는 원인이 있습니까? –

답변

2

이것은 바이러스 백신 소프트웨어 (특히 AVG)와 업로드 프록시 또는 방화벽의 문제 일 수 있습니다. 때문에 파일이 서버에 업로드를 완료하면 (파일의 복사본을 저장이 경우) 처리에

Every flash uploader giving bad progress values

+0

감사합니다.이 게시물은 매우 흥미로 웠고 제 문제를 정확하게 설명합니다. 덧붙여 말하자면, 데스크탑 컴퓨터에서 AVG를 사용하고 있습니다. 나는 이것을 AVG가없는 다른 머신에서 테스트 해보고 차이가 있는지 살펴 보겠다. – Mun

+0

일부 테스트를 마친 후에는 문제가 실제로 AVG 인 것 같습니다. 감사.Uploadify 진행률 표시 줄은 프록시를 통해 작업 할 때 여전히 신뢰할 수 없기 때문에 같은 이유로 인해 NeatUpload를 사용합니다. 그러나이 이상한 동작의 원인을 마침내 발견하는 것이 좋습니다. – Mun

관련 문제