从 Asp.Net 核心 WebAPI 返回 jpeg 映像

使用 Net 核心 web API,我想让我的控制器操作方法返回一个 图像流图像流图像流图像流
在我当前的实现中,浏览器 只显示一个 json 字符串。 我的期望是在浏览器中看到图像。

在使用 chrome 开发工具进行调试时,我发现内容类型仍然是

Content-Type:application/json; charset=utf-8

在响应头中返回,即使在我的代码中我手动将内容类型设置为“ image/jpeg”。

寻找解决方案 My Web API 如下所示

[HttpGet]
public async Task<HttpResponseMessage> Get()
{
var image = System.IO.File.OpenRead("C:\\test\random_image.jpeg");
var stream = new MemoryStream();


image.CopyTo(stream);
stream.Position = 0;
result.Content = new StreamContent(image);
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "random_image.jpeg";
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
result.Content.Headers.ContentLength = stream.Length;


return result;
}

enter image description here

72210 次浏览

清洗液 使用 FilestreamResult! !

[HttpGet]
public IActionResult Get()
{
var image = System.IO.File.OpenRead("C:\\test\\random_image.jpeg");
return File(image, "image/jpeg");
}

说明:

在 ASP.NET Core 中,必须在 Controller 中使用 内置的 File()方法。这将允许您手动设置内容类型。

不要创建和返回 HttpResponseMessage,就像您在 ASP.NET Web API 2中使用的那样。它什么也不做,甚至没有投掷错误! !

[HttpGet("Image/{id}")]
public IActionResult Image(int id)
{
if(id == null){ return NotFound(); }
else{


byte[] imagen = "@C:\\test\random_image.jpeg";
return File(imagen, "image/jpeg");
}
}

PhysicalFile 有助于以简单的语法从 Asp.Net Core WebAPI 返回文件

    [HttpGet]
public IActionResult Get(int imageId)
{
return PhysicalFile(@"C:\test.jpg", "image/jpeg");
}

在我的例子中,我使用了图像的相对路径,因此下面是我的工作解决方案

[HttpGet]
public async Task<IActionResult> Get()
{
var url = "/content/image.png";
var path = GetPhysicalPathFromURelativeUrl(url);
return PhysicalFile(image, "image/png");
}
public string GetPhysicalPathFromRelativeUrl(string url)
{
var path = Path.Combine(_host.Value.WebRootPath, url.TrimStart('/').Replace("/", "\\"));
return path;
}