我正在使用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 关注
 - 197 浏览
 
添加回答
举报
0/150
	提交
		取消
	