.net core .Net Core-通过api发送图像=解释为文档但使用MIME类型图像/jpeg传输的资源
在.Net Core MVC应用程序的wwwroot文件夹中,我有一些图像。我需要将这些图片提供给TopDesk,在那里我可以插入一个嵌入的url。我对Topdesk没有影响。我只能改变服务形象的方式 当我使用到图像的直接链接时,它就起作用了。图像被嵌入 直接url的示例:.net core .Net Core-通过api发送图像=解释为文档但使用MIME类型图像/jpeg传输的资源,.net-core,asp.net-core-webapi,mime,.net Core,Asp.net Core Webapi,Mime,在.Net Core MVC应用程序的wwwroot文件夹中,我有一些图像。我需要将这些图片提供给TopDesk,在那里我可以插入一个嵌入的url。我对Topdesk没有影响。我只能改变服务形象的方式 当我使用到图像的直接链接时,它就起作用了。图像被嵌入 直接url的示例: https://my.web.site/images/image001.jpeg 但是有一个有限的嵌入大小(600px),所以我需要调整图像的大小。为此,我编写了一个非常简单的api控制器: [HttpGet] [Rout
https://my.web.site/images/image001.jpeg
但是有一个有限的嵌入大小(600px),所以我需要调整图像的大小。为此,我编写了一个非常简单的api控制器:
[HttpGet]
[Route("api/Images/GetImage/{id}")]
public IActionResult GetImage(string id)
{
try
{
var pad = $"c:\\Images\\{id}";
if(System.IO.File.Exists(path))
{
var fileBytes = System.IO.File.ReadAllBytes(path);
var smallImage = ..... doing resizing;
new FileExtensionContentTypeProvider().TryGetContentType(Path.GetFileName(path), out var contentType);
return File(smallImage , contentType ?? "application/octet-stream", $"{id}");
}
return NotFound();
}
catch(Exception ex)
{
return BadRequest(ex.Message);
}
}
但是url
https://my.web.site/api/images/GetImage/image001.jpeg
导致
解释为文档但使用MIME类型传输的资源
图像/jpeg
图像没有显示。
当我在Postman中测试url时,它会毫无警告地返回图像。
这里缺少什么?请尝试使用
FileContentResult
而不是返回文件:
[HttpGet]
[Route("api/Images/GetImage/{id}")]
public IActionResult GetImage(string id)
{
try
{
var path = $"c:\\Images\\{id}";
if(System.IO.File.Exists(path))
{
var fileBytes = System.IO.File.ReadAllBytes(path);
var smallImage = ..... doing resizing;
new FileExtensionContentTypeProvider().TryGetContentType(Path.GetFileName(path), out var contentType);
return new FileContentResult(fileBytes, contentType ?? "application/octet-stream");
}
return NotFound();
}
catch(Exception ex)
{
return BadRequest(ex.Message);
}
}
当使用浏览器导航到/GetImage/{id}
时,您将看到使用文件
浏览器倾向于下载文件,但使用文件内容结果
它直接在浏览器选项卡中显示图像,这与使用静态文件的行为相同。这可能是因为在使用File
/FileContentResult
时添加了响应头(可能是头)。但不确定TopDesk是如何使用这些图像的
离题:最好不要在每个请求中实例化文件扩展ContentTypeProvider
。相反,您可以在Startup.cs中将其注册为singleton,如:
services.AddSingleton(new FileExtensionContentTypeProvider());
并将其注入控制器的构造函数。回答得很好。将文件更改为FileContentResult非常有效。此外,我还计划更改FileExtensionContentTypeProvider,原因如下。我知道我不是最好的方式,但还是必须改变它。第一件事优先;-)@肯哈斯很高兴这有帮助:)