2011-10-28 1 views
1

웹 서버가 HTTP를 통해 다른 소스에서 파일을 검색하고 동시에 브라우저로 스트리밍하는 파일 다운로드 기능을 제공해야합니다. . 내가 MVC의 Controller.File ActionResult를 사용하여 작동하지 않습니다 추측하고 있지만, 어쨌든이 같은 프로토 타입을 썼다 :ASP.NET MVC 3은 서버가 다른 곳에서 파일을 가져 오는 동안 브라우저에 대용량 파일 다운로드를 제공합니다.

public ActionResult Download() 
{ 
    HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("http://somewhere/somefile.pdf"); 
    HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); 
    Stream stream = webResponse.GetResponseStream(); 
    var mimeType = "application/pdf"; 
    var fileName = "somefile.pdf"; 
    return File(stream, mimeType, fileName); 
} 

이 잘 작동하지만 호출 할 방법이없는 HttpWebResponse 클래스 및 스트림 이후에() 닫기 return 문. HttpWebResponse.GetResponseStream 메서드의 help은 "스트림을 닫고 다시 사용하기 위해 연결을 해제하려면 Stream.Close 또는 HttpWebResponse.Close 메서드를 호출해야하며 Stream.Close 및 HttpWebResponse.Close를 호출 할 필요는 없습니다. 하지만 이렇게하면 오류가 발생하지 않습니다. 스트림을 닫지 않으면 응용 프로그램의 연결이 끊어집니다. "

HttpHandler를 만들고 소스 스트림에서 수동으로 바이트를 읽고 응답에 대해 this 또는 this 라인을 따라 작성해야합니까? 내가 알지 못하는 또 다른 접근법이 있습니까?

+0

[이 질문에] (http://stackoverflow.com/questions/2129428/does-file-in-asp-net-mvc-close-the-stream), 프레임 워크가 스트림을 닫습니다. 이 경우. –

답변

0

나는 이와 같은 것을 시도하는 것에 익숙하지 않지만 처음에는 스트림에서 읽고 연결을 종료 한 다음 바이트를 응답으로 반환하는 방법을 제안했습니다. 스트림이므로 프로토 타입 에서처럼 내용을 반환하기 위해 열어 둘 수는 있지만 어떻게 끝나면 닫을 수 있는지는 알 수 없습니다.