2015-02-03 6 views
1

아래 코드는 완벽하게 작동합니다. 지정된 이미지를 제공합니다.이미지 제공 - 이미지 리소스 닫기

public HttpResponseMessage Get(string id)  
    { 
     string fileName = string.Format("{0}.png", id); 
     FileStream fileStream = File.Open(System.Web.Hosting.HostingEnvironment.MapPath("~/Images/" + fileName), FileMode.Open); 
     HttpResponseMessage response = new HttpResponseMessage { Content = new StreamContent(fileStream) }; 
     response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg"); 
     response.Content.Headers.ContentLength = fileStream.Length; 
     return response; 
    } 

이미지 파일을 읽으려고 얻은 리소스를 릴리스하기 만하면 다음과 같이 코드가 수정되었습니다.

public HttpResponseMessage Get(string id)  
{ 
    string fileName = string.Format("{0}.png", id); 
    using (FileStream fileStream = File.Open(System.Web.Hosting.HostingEnvironment.MapPath("~/Images/" + fileName), FileMode.Open)) 
     { 
      HttpResponseMessage response = new HttpResponseMessage { Content = new StreamContent(fileStream) }; 
      response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg"); 
      response.Content.Headers.ContentLength = fileStream.Length; 
      return response; 
     } 
} 

"내용을 스트림에 복사하는 중 오류가 발생했습니다". 예. 리소스가 스트리밍되기 전에 닫습니다.

하지만 문제는 이미지를 제공하고 처리되지 않은 리소스를 닫는 방법입니까? Asp.Net 웹 API 2 이상. 의견을 보내 주셔서 감사합니다.

+0

'StreamContent'를 사용하고'MediaTypeHeaderValue'를 응답 헤더에 추가하십시오. – boosts

답변

1

FileStream 개체를 출시 할 염려가 없습니다. 응답이 완료되면 Web API의 하위 계층에 의해 닫힙니다. 첫 번째 스 니펫에 언급 된 코드는 문제가 없습니다.

+0

당신의 성명을 구체화 할 수있는 문서가 있습니까? 나는이 칭의에 기초하여 동료들을 설득 할 수 없다. –

+0

@GaneshaK이 주제에 대한 특정 MSDN URL이 없습니다. 하지만 웹 API를 통해 파일 객체 수를 제공 한 경험을 토대로 대답 해 주셨습니다. 또한 [이 질문에] 참조 할 수 있습니다 (http://stackoverflow.com/questions/3084366/how-do-i-dispose-my-filestream-when-implementing-a-file-download-in-asp-net/3086291 # 3086291) 자세한 내용은 –