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

我正在使用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 来修复,但不是很糟糕吗?流不留在内存中吗?


慕森卡
浏览 163回答 2
2回答

jeck猫

虽然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");诚然,这有点个人偏好,但这对我来说看起来更干净,更“正确”。
打开App,查看更多内容
随时随地看视频慕课网APP