2009-12-03 3 views
3

다운로드 링크를 클릭 할 때 사용자에게 파일을 전달하는 코드가 있습니다. 보안상의 이유로 파일에 직접 링크 만 할 수는 없으므로 URL을 디코딩하고 파일을 전송하도록 설정되었습니다.Response TransmitFile

잠시 동안 잘 작동했지만 최근에는 파일 다운로드가 시작될 때 문제가 발생하기 시작했지만 파일의 크기가 표시되지 않습니다.

다운로드가 중지되어야 할 때이 때문에.

파일은 약 99MB이지만 다운로드 할 때 브라우저는 100MB를 초과하는 방식으로 다운로드합니다. 다운로드하는 내용을 모르지만 취소하지 않으면 멈추지 않습니다.

그래서 내 질문은 TransmitFile에 대한 대안이나 적절한 시간에 중지되도록 파일 크기가 전송되도록하는 방법입니까? 나는 그것이 너무 커서 이후 내가 전체 파일을 메모리로로드 싶지 않기 때문에 WriteFile을 사용하지 않으

string filename = Path.GetFileName(url); 
context.Response.Buffer = true; 
context.Response.Charset = ""; 
context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
context.Response.ContentType = "application/x-rar-compressed"; 
context.Response.AddHeader("content-disposition", "attachment;filename=" + filename); 
context.Response.TransmitFile(context.Server.MapPath(url)); 
context.Response.Flush(); 

: 여기

는 코드입니다.

감사합니다.

+0

죄송합니다. 코드를 게시하는 것을 잊어 버렸습니다. string filename = Path.GetFileName (url); context.Response.Buffer = true; context.Response.Charset = ""; context.Response.Cache.SetCacheability (HttpCacheability.NoCache); context.Response.ContentType = "application/x-rar-compressed"; context.Response.AddHeader ("content-disposition", "attachment; filename ="+ filename); context.Response.TransmitFile (context.Server.MapPath (url)); context.Response.Flush(); – geoff

+0

도움이되기를 기대했지만 도움이되지 않는 코드를 발견했습니다. FileInfo OutFile = 새 FileInfo (context.Server.MapPath (url)); context.Response.Clear(); string filename = Path.GetFileName (url); context.Response.Buffer = true; context.Response.Charset = ""; context.Response.Cache.SetCacheability (HttpCacheability.NoCache); context.Response.ContentType = "application/x-rar-compressed"; context.Response.AddHeader ("content-disposition", "attachment; filename ="+ filename); context.Response.TransmitFile (context.Server.MapPath (url), 0, OutFile.Length); context.Response.Flush(); – geoff

답변

2

답변을 찾은 것 같습니다.

다음 코드를 추가했는데 이제는 최소한 저에게 올바른 파일 크기를보고하고 예상대로 작동하고 있습니다.

FileInfo OutFile = new FileInfo(context.Server.MapPath(url)); 
long filesize = OutFile.Length; 
.... 
context.Response.AddHeader("Content-Length", filesize.ToString());