需要显示从WebApi调用中检索到的图像

时间:2016-12-05 17:37:16

标签: image asp.net-web-api stream filestream

我需要像使用普通HTML一样显示图像,但出于安全原因,我无法为图像提供正常的网址。相反,我需要从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;
}

1 个答案:

答案 0 :(得分:0)

愚蠢的错误。 using {}块在加载数据之前杀死了FileStream。