我见过这些SO答案:
但这些服务器直接提供物理文件或从字节数组提供服务。
请问我们的Web API端点是否可以直接从data:image / png; base64,(我们的base64字符串)返回content-type:image / png
从文件夹中读取文件非常简单。诀窍是在ASP.NET Core中使用IHostingEnvironment来获取当前的Web根路径。
using System;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
namespace DemoWebApiCore.Controllers
{
[Route("api/[controller]")]
public class FilesController : Controller
{
private readonly IHostingEnvironment _hostingEnvironment;
public FilesController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
// GET api/files/sample.png
[HttpGet("{fileName}")]
public string Get(string fileName)
{
string path = _hostingEnvironment.WebRootPath + "/images/" + fileName;
byte[] b = System.IO.File.ReadAllBytes(path);
return "data:image/png;base64," + Convert.ToBase64String(b);
}
}
}
HomeController.cs
using Microsoft.AspNetCore.Mvc;
namespace DemoWebApiCore.Controllers
{
public class HomeController : Controller
{
// GET: /<controller>/
public IActionResult Index()
{
return View();
}
}
}
Index.cshtml
<html>
<body>
<img id="sample-img" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
var url = "/api/files/sample.png";
$.get(url, function (data) {
console.log(data);
$("#sample-img").attr('src', data);
});
})
</script>
</body>
</html>
如果要将图像作为base64字符串返回,可以这样做:
public IHttpActionResult GetImage()
{
var image = GetImageData();
var base64 = Convert.ToBase64String(image);
return Ok(base64);
}