c# - 读流两次?

标签 c# .net .net-core stream

当我从我的网站上传图片后,我需要做两件事:

  1. 阅读图片尺寸
  2. 保存图片到数据库

我做的第一件事是将图像流读入 Image 对象,如下所示:

var file = Request.Files["logo"];

Image FullsizeImage = Image.FromStream(file.InputStream);

接下来我要做的是将"file"对象保存到数据库 (LINQ to SQL)。但是,当我尝试将图像保存到数据库时,文件中的流位于流的末尾,而且似乎不存在任何数据。

我知道我应该以某种方式重置流并将其放回位置 0,但我该如何以最有效和正确的方式做到这一点?

最佳答案

嗯,最简单的方法是:

file.InputStream.Position = 0;

...假设流支持搜索。但是,如果您不小心,这可能会对 Image 做一些有趣的事情 - 因为它会保留对流的引用。

最好将数据加载到字节数组中,然后在需要时从中创建两个单独的 MemoryStream 对象。如果您使用的是 .NET 4,则可以轻松地将一个流复制到另一个流:

MemoryStream ms = new MemoryStream();
Request.Files["logo"].InputStream.CopyTo(ms);
byte[] data = ms.ToArray();

关于c# - 读流两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4266448/

相关文章:

.net-core - 在 .NET 核心的 xunit 上下文中获取 ContentRootPath 或 IHostingEnvironment

c# - 当应用于大量数据时,SQL CLR 聚合无法正确终止

wcf - .Net core 2.0 WCF 服务器端路线图

c# - 使用Windows身份验证的Asp.net核心Web API - Cors请求未经授权

c# - 显示内部服务器错误?

c# - 如何使用 c#、dot net、word 模板、xml 在 word 2010 中生成报告

c# - wpf 验证 - 我怎样才能让这个代码在输入发生时触发验证(离开字段时比较)

C# 无法解析符号

c# - 在 ASP.net 核心应用程序的强类型配置类中使用 System.Uri

c# - 无法在 Internet Explorer 上绘图