我正在使用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");
诚然,这有点个人偏好,但这对我来说看起来更干净,更“正确”。
- 2 回答
- 0 关注
- 162 浏览
添加回答
举报
0/150
提交
取消