我正在使用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");
}
这给出了一个例外,说该流已关闭。
可以通过删除使用来修复但不是很糟糕吗?溪流不在记忆中吗?
答案 0 :(得分:5)
删除using
上的outputStream
块。流在被响应使用之前被关闭/处理。
FileResult
将在完成使用后关闭流。
var barcode = new Barcode().Encode(TYPE.CODE128, reference);
var outputStream = new MemoryStream();
barcode.Save(outputStream, ImageFormat.Jpeg);
outputStream.Seek(0, SeekOrigin.Begin);
return File(outputStream, "image/jpeg");
答案 1 :(得分:2)
虽然FileResult
会关闭游戏,但坦白地说,我不喜欢依赖于我之后清理的一些外部事物,至少在我看来,代码看起来很错误,新来了{{{ 1}}在MemoryStream
块之外,只是让它一直没有明确地关闭它。
using
的重载接受一个字节数组,因此您只需将返回移到File
块之外。
using
诚然,这有点个人偏好,但这看起来更干净,更正确"对我来说。