4

我想从服务器下载图像并在浏览器中显示它们。但是当我在浏览器中输入 url (localhost:port/api/service/imageID) 时,会出现下载框,询问我是保存还是打开图像。但我希望图像直接显示在浏览器中。这是我的控制器“获取”方法:

public HttpResponseMessage Get(int id)
{
  HttpResponseMessage response;
  var image = _repository.RetrieveImage(id);

  if (image == null)
  {
    response = new HttpResponseMessage(HttpStatusCode.NotFound);
  }
  else
  {
    response = new HttpResponseMessage(HttpStatusCode.OK);

    response.Content = new StreamContent(new MemoryStream(image.ImageData));
    response.Content = new ByteArrayContent(image.ImageData);
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = image.OriginalFileName;
    response.Content.Headers.ContentType = new MediaTypeHeaderValue(image.Mime);
    response.Content.Headers.ContentLength = image.ImageData.Length;
  }
  return response;

非常感谢您的帮助

4

3 回答 3

4

不要使用“附件”内容处置标头。使用该标头指示浏览器下载指定的文件,而不是内联显示它。

 response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
于 2013-02-19T00:07:55.457 回答
2

为完整起见,请注意,Content-Disposition使用“另存为”上下文菜单保存时,删除文件名也会删除文件名的任何提示,并且将根据 URL 建议文件名,在这种情况下将类似于“42.jpg” ,因为 URL 的最后一部分是一个 ID。如果要在保存期间保留文件名,请将其更改Content-Disposition为“内联”:

response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline")
{
    FileName = image.OriginalFileName,
    Size = image.ImageData.Length
};
于 2017-07-23T20:18:03.170 回答
0

对于您的情况,我认为您可以只返回一个 StreamContent 并提供此内容的适当内容类型标头。(例如:图像/jpeg)

于 2013-02-19T00:15:59.107 回答