2009-05-14 2 views
14

이미지를 반환하는 간단한 컨트롤러가 있습니다.FileStreamResult와 FilePathResult의 차이점은 무엇입니까?

public class ImageController : Controller 
{ 
    [AcceptVerbs(HttpVerbs.Get)] 
    [OutputCache(CacheProfile = "StationeryImageCache")] 
    public FileResult Show(int customerId, string imageName) 
    { 
     try 
     { 
      var path = string.Concat(Config.ImageDir, customerId, @"\", imageName); 
      return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg"); 
     } 
     catch(System.IO.FileNotFoundException ex) 
     { 
      throw new MissingImageException(imageName); 
     } 
    } 
} 

내 관리자가 코드 검토 중에 FileStreamResult를 발견하고이를 다음과 같이 바꾸어야한다고 언급했습니다.

return new FilePathResult(path, "image/jpeg"); 

. 그러나 며칠 후 우리의 다른 개발자 중 한 명이 내가 되찾고있는 이미지 중 일부가 다시 손상되었다고보고했습니다. 특히, 어떤 시점에서 차단 된 많은 이미지가있었습니다. 이미지의 크기는 정확했지만 바닥의 25 % - 이미지의 40 %가 사라졌습니다.

파일 시스템에서 원본 이미지를 볼 때 아무 문제가 없었습니다. 나는 브라우저에서 이미지를 그렸고 잘 보였다. 하지만 내 컨트롤러는 이미지의 일부만 반환했습니다. 더 나쁜 것은 문제가되는 이미지들 중 약 30 %에 불과하다는 것입니다 ... 나는 일하는 사람들과 그렇지 않은 사람들 사이에 특별한 차이점을 찾을 수는 없지만.

이 디버깅을 시도하는 동안 작업의 결과가 FileStreamResult로 되 돌렸고 갑자기 모든 것이 다시 작동했습니다.

누구든지 이것에 대한 설명을 알고 있습니까?

답변

13

FilePathResult에서 사용되는 HttpResponse.TransmitFile에는 몇 가지 문제점이 있거나있는 것으로 보입니다. 이 주소는 hotfix에 따라 서버를 실행중인 Windows의 버전에 따라 다를 수 있습니다. Google에서 'response.TransmitFile error'와 같은 것을 검색하면 많은 오류가 발생합니다.

원본 코드를 사용해야합니다.

+0

니스 찾기! 나는 근원지를 파헤 치려하고 있었지만, 내가 가지고 있었다고해도 나는 이것을 알지 못했을 것이다. –

관련 문제