读两次流?

dan*_*ich 26 c#

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

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

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

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

Image FullsizeImage = Image.FromStream(file.InputStream);
Run Code Online (Sandbox Code Playgroud)

我接下来要做的是将"文件"对象保存到数据库(LINQ to SQL).但是,当我尝试将图像保存到数据库时,来自文件的流在流的末尾有它的位置,似乎没有数据存在.

我知道我应该重新设置流并将其重新置于0位置,但我该如何做到最有效率和最正确的方式呢?

Jon*_*eet 55

嗯,最简单的方法是:

file.InputStream.Position = 0;
Run Code Online (Sandbox Code Playgroud)

...假设流支持寻求.但是,Image如果您不小心,那可能会有趣的事情- 因为它将保留对流的引用.

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

MemoryStream ms = new MemoryStream();
Request.Files["logo"].InputStream.CopyTo(ms);
byte[] data = ms.ToArray();
Run Code Online (Sandbox Code Playgroud)