2016-12-05 4 views
0

일반 HTML을 사용하는 것처럼 이미지를 표시해야하지만 보안상의 이유로 이미지에 일반 URL을 제공 할 수 없습니다. 대신 WebApi 서비스에서 이미지를 검색해야합니다. 나는 대답에 제공된 링크 검토 한 결과,하지만 뭔가가 작동하지 않습니다,WebApi 호출에서 검색된 이미지를 표시해야합니다.

https://stackoverflow.com/a/24985886/1481314

그리고 :이 발견했다. 내가 얻는 것은 누락 된 이미지 자리 표시 자입니다.

내 코드입니다 - 클라이언트 측 :

 angular.element('#' + imageType + '_' + itemID).html('<img src="/api/filemanagermaindata/getFile?systemName=' + baseData.CustomerData.SystemName + '&fileID=' + id + '" />') 

이 내 WebApi 컨트롤러 방법

[HttpGet] 
[Route("api/filemanagermaindata/getFile")] 
public HttpResponseMessage GetFile(string systemName, int fileID) 
{ 
    var customerData = ValidateUser(systemName, 0); 
    var response = this.fileMover.GetFileDataHttpResponse(customerData.OrganizationID, fileID); 
     return response; 
}   

그리고 얻고 이미지를 반환 내 수업 방법입니다 ...

var response = new HttpResponseMessage(); 

try 
{ 
    FileManagerItem item = this.dataService.GetFileByID(fileID); 
    var fullPath = this.rootLocation + Path.Combine(item.PhysicalPath, item.Name); 

if (!File.Exists(fullPath)) 
{ 
    throw new Exception("Unable to locate the requested file"); 
} 

var fileType = Path.GetExtension(item.Name).Replace(".", string.Empty); 

if (ApplicationSettings.Instance.ImageFileExtensions.Contains(fileType)) 
{ 
    fileType = string.Format("image/{0}", fileType); 
} 

using (FileStream fileStream = new FileStream(fullPath, FileMode.Open, FileAccess.Read)) 
{ 
    response = new HttpResponseMessage { Content = new StreamContent(fileStream) }; 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue(fileType); 
    response.Content.Headers.ContentLength = fileStream.Length; 
}; 

return response; 
} 
+0

어쩌면 이것 좀 봐. http://stackoverflow.com/questions/12467546/is-there-a-recommended-way-to-return-an-image-using-asp-net-web-api –

답변

0

벙어리 실수. } {} 블록을 사용하면 데이터가로드되기 전에 FileStream이 종료되었습니다.