0

请帮忙。

我已经搜索了几个小时,因为我无法在网站上显示图像。我正在使用数据库中的 byte[] 然后在控制器中返回 FileStreamResult。

下面是我的代码

.cshtml

 <img src="@Url.Action("GetImage", "User")" />

用户服务

我能够使用 byte[] 值调用 api。

    public async Task<HttpResponseMessage> GetImage()
    {
        var client = _clientFactory.CreateClient("ApiName");
        var response = await client.GetAsync(apiUrl);
        return response;
    }

控制器

    [ResponseCache(Duration = 10)]
    [HttpGet]
    public async Task<IActionResult> GetImage()
    {
        var response = await _user.GetImage();
        if (response.IsSuccessStatusCode)
        {
            var logo = await response.Content.ReadAsByteArrayAsync();
            var ms = new MemoryStream(logo);
            FileStreamResult result = new FileStreamResult(ms, "image/png");
            result.FileDownloadName = "logo1223.png";
            return result;
        }

        return null;
    }

API

        [HttpGet("logo")]
        public async Task<IActionResult> GetImage()
        {
            var someByte= await GetSomeImage();
            return Ok(someByte);
        }

当我尝试下载或保存图像文件时,我得到了这个结果。

在此处输入图像描述

图片未从网站加载

在此处输入图像描述

更新 我尝试手动获取文件然后转换为字节 [] 并且图像在网站上正确显示,我检查了他们如何上传图像......我发现他们正在使用下面的代码将图像保存在数据库中。

var byteArr= Encoding.UTF8.GetBytes(Convert.ToBase64String(bArr.ToArray()))

试过这个修改后的控制器

 public async Task<FileContentResult> GetImage()
 {
            var img = Image.FromFile(@"C:\Downloads\test.png");
            byte[] bArr = imgToByteArray(img);
            var a = Encoding.UTF8.GetBytes(Convert.ToBase64String(bArr.ToArray()));
            return File(bArr, "image/png"); // WORKING!!!
            //return File(a, "image/png"); // NOT WORKING!!
}

有没有办法将其转换为原始字节图像?

4

1 回答 1

0

主要问题是徽标使用以下代码保存在数据库中

var byteArr= Encoding.UTF8.GetBytes(Convert.ToBase64String(bArr.ToArray()))

解决方法:转换成原始byte[]得到图片

        [ResponseCache(Duration = 10)]
        [HttpGet]
        public async Task<IActionResult> GetImage()
        {
            var response = await _user.GetImage();
            if (response.IsSuccessStatusCode)
            {
               // I created new class Logo which contains byte[] Logo
                var logo = await response.Content.ReadAsAsync<Logo>();
               // Convert to original byte[]
                byte[] originalByte = Convert.FromBase64String(Encoding.UTF8.GetString(logo.Logo));
                 
                return File(originalByte, "image/png");
            }
    
            return null;
        }
于 2021-12-03T08:24:48.510 回答