2012-01-07 76 views
0

我有一個asp.net mvc應用程序,允許上傳圖片。我想知道做什麼是最好的方法。保存圖像的最佳方法?

現在我有這個

HttpPostedFileBase uploadedImg = Session[SessionImgKey] as HttpPostedFileBase; 

if (uploadedImg != null) 
{ 
    string fileName = CreateFile(MyField.Name, uploadedImg); 
    tableA.ImagePath = String.Concat(ImgFolderPathLoctaion, "\\", fileName); 
} 

這是不錯,但我想將它移到我的服務層,我不希望在導入web.dll有到我的業務層項目。

所以我應該使用流?或類似Image Save(我認爲這可能更適合通過繪圖類而不是圖像上傳的圖像

+2

爲什麼上傳的文件存儲在會話中? – alexn 2012-01-07 23:24:31

+0

我有一個jQuery的形式嚮導由ajax發佈(使用序列化)。由於用ajax發佈文件是不可能的(不使用iframe或html5)。我不得不使用plupload,因此他們必須點擊上傳按鈕才能將它存儲在會話中,並且當他們提交整個表單時,我會將其從會話中刪除。 – chobo2 2012-01-07 23:48:01

回答

1

您可以從發佈的文件中獲取圖像流,將其轉換爲圖像(System.Drawing)並保存:

var stream = uploadedImg.InputStream; 
var buffer = new byte[stream.Length]; 
stream.Read(buffer, 0, buffer.Length); 
//convert stream into image 
Image myImage = Image.FromStream(new MemoryStream(buffer)); 
myImage.Save("c:\myimage.jpg"); 
+0

這比使用流讀寫器並寫入字節更好嗎? – chobo2 2012-01-07 23:49:02

+0

HttpPostedFileBase的InputStream屬性爲您提供上傳文件的流,因此您不需要流讀取器,圖像的Save方法在文件上寫入緩衝圖像的內容,同樣的事情是通過流完成的作家。結果是一樣的。 – 2012-01-07 23:54:26

+0

我是否應該使用上傳的相同文件擴展名,或者您認爲我應該強制執行一個標準(例如將所有內容保存爲JPG格式) – chobo2 2012-01-08 01:28:38

0

如果您需要將文件傳遞到服務層,請使用HttpPostedFileBase的InputStream屬性傳遞流。通過這種方式,您的服務層不知道您的網頁/表示層。

+0

這是我會做的,但我不確定將它寫入服務器的最佳方式是什麼?使用流讀取器和寫入器? – chobo2 2012-01-07 23:46:06