为了账号安全,请及时绑定邮箱和手机立即绑定

如何从图像/位图对象返回图像作为 IActionResult

如何从图像/位图对象返回图像作为 IActionResult

C#
慕森卡 2021-07-06 13:53:57
我正在使用barcodelib 库+ .Net Core 中可用的System.Drawing.Common 包生成条形码图像。我想将图像作为普通图像(或作为下载)返回给浏览器中的用户,但我似乎找不到这样做的好方法。我试过的:var barcode = new Barcode().Encode(TYPE.CODE128, reference);usuing (var outputStream = new MemoryStream()) {    barcode.Save(outputStream, ImageFormat.Jpeg);    outputStream.Seek(0, SeekOrigin.Begin);    return File(outputStream, "image/jpeg");}这给出了一个例外,说流已关闭。它可以通过删除 using 来修复,但不是很糟糕吗?流不留在内存中吗?
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

虽然FileResult会关闭流,但坦率地说,我不喜欢依赖于在我之后清理的一些外部事物,至少在我看来,代码看起来错误,只是MemoryStream在using块的外部新建并且在没有明确的情况下放手关闭它。


有一个File接受字节数组的重载,因此您可以简单地将返回值移到using块之外。


byte[] bytes;

using (var ms = new MemoryStream()) 

{

    var barcode = new Barcode().Encode(TYPE.CODE128, reference);

    barcode.Save(ms, ImageFormat.Jpeg);

    bytes = ms.ToArray();

}

return File(bytes, "image/jpeg");

诚然,这有点个人偏好,但这对我来说看起来更干净,更“正确”。


查看完整回答
反对 回复 2021-07-10
  • 2 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信