直接从web api核心端点返回base64编码图像

问题描述 投票:2回答:2

我见过这些SO答案:

但这些服务器直接提供物理文件或从字节数组提供服务。

请问我们的Web API端点是否可以直接从data:image / png; base64,(我们的base64字符串)返回content-type:image / png

asp.net-web-api asp.net-core
2个回答
7
投票

从文件夹中读取文件非常简单。诀窍是在ASP.NET Core中使用IHostingEnvironment来获取当前的Web根路径。

FilesController

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>

2
投票

如果要将图像作为base64字符串返回,可以这样做:

public IHttpActionResult GetImage()
{
    var image = GetImageData();
    var base64 = Convert.ToBase64String(image);

    return Ok(base64);
}
© www.soinside.com 2019 - 2024. All rights reserved.