2016-12-05 56 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。

相关问题