AspNet Core - 无法从 FileStreamResult 加载图像
AspNet Core - Could not load the image from FileStreamResult
请帮忙。
我已经搜索了几个小时,因为我无法在网站上显示图片。我在数据库中使用 byte[],然后在控制器中使用 return 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);
}
当我尝试下载或保存图像文件时,我得到了这个结果。
图片未从网站加载
更新
我尝试手动获取文件然后转换为 byte[] 并且图像在网站上正确显示,
我检查了他们是如何上传图片的……我发现了
他们使用以下代码将图像保存在数据库中。
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!!
}
有没有办法将其转换为原始字节图像?
主要问题是使用以下代码将徽标保存在数据库中
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;
}
请帮忙。
我已经搜索了几个小时,因为我无法在网站上显示图片。我在数据库中使用 byte[],然后在控制器中使用 return 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);
}
当我尝试下载或保存图像文件时,我得到了这个结果。
图片未从网站加载
更新 我尝试手动获取文件然后转换为 byte[] 并且图像在网站上正确显示, 我检查了他们是如何上传图片的……我发现了 他们使用以下代码将图像保存在数据库中。
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!!
}
有没有办法将其转换为原始字节图像?
主要问题是使用以下代码将徽标保存在数据库中
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;
}