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

时间:2018-05-29 13:38:48

标签: c# image asp.net-core

我正在使用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");
}

这给出了一个例外,说该流已关闭。

可以通过删除使用来修复但不是很糟糕吗?溪流不在记忆中吗?

2 个答案:

答案 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

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