2010-11-24 72 views
20

當我從我的網站上傳的圖片,我需要做兩件事情:讀取流兩次?

  1. 讀取圖像尺寸
  2. 將圖像保存到數據庫

我做的第一件事是閱讀圖像流成一個Image對象,像這樣:

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

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

我做的下一件事就是「文件」對象保存到數據庫中(的LINQ to SQL)。但是,當我嘗試將圖像保存到數據庫時,來自文件的流在流結束時具有位置,並且似乎沒有數據存在。

我知道我應該somwhow重置流並將其放回到位置0,但我該怎麼做,最有力和正確的方式?

回答

32

好,最簡單的方法是:

file.InputStream.Position = 0; 

...假設流支持搜索的。但是,如果您不小心,可能會對Image做有趣的事情 - 因爲它會保留對流的引用。

如果您仍然需要,您可能最好將數據加載到字節數組中,然後從中創建兩個單獨的對象(MemoryStream)。如果您使用的是.NET 4,將一個流複製到另一個流很容易:

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

您的意思是file.InputStream.Position = 0; ? – danielovich 2010-11-24 12:01:00