2015-12-15 65 views
0

嗨我正在一個應用程序中,我們提供選項來更改用戶的配置文件圖像。如何避免使用BinaryReader時出現OutOfMemoryException

我正在使用文件上傳控件來選擇文件。它允許最大100MB。

但我限制圖像大小爲30Mb。上傳至20MB的圖像沒有任何問題。當它超過20MB時,它顯示OutOfMemoryException。我使用BinaryReader來保存圖像。

var file = context.Request.Files[0]; 
if (!Directory.Exists(Folder)) 
{ 
    Directory.CreateDirectory(Folder); 
} 

if (file.ContentLength != 0) 
{ 
    if (Directory.Exists(targetFolder + "\\" + context.Request["Name"]) == false) 
    { 
     Directory.CreateDirectory(targetFolder + "\\" + context.Request["Name"]); 
    } 

    var binaryReader = new BinaryReader(file.InputStream); 
    var memoryBytes = binaryReader.ReadBytes(file.ContentLength); 
    using (var memoryStream = new MemoryStream(memoryBytes)) 
    { 
     var imageStream = Image.FromStream(memoryStream); 
     imageStream.Save(targetFolder + "\\" + context.Request["Name"] + "\\" + "picture" + ".png" , ImageFormat.Png); 
    } 
} 

有沒有我犯的錯誤?或者請建議任何其他方法來保存圖像。

在此先感謝!任何幫助,將不勝感激。

+0

也許這個答案給你一些想法http://stackoverflow.com/a/8613300/2263683 –

+0

可能不會解決你的問題,但不應該關閉'BinaryReader'?或者在'using'語句中使用它。很確定它實現了'IDisposable',所以你可能會在那裏泄漏。 –

+0

我已經使用BinaryReader,但問題沒有解決。我得到同樣的例外。 – Shesha

回答

0

你必須使用using(binaryReader){}或讀者應該 使用後丟棄(因爲,使用調用Dispose()的使用塊 留後,即使代碼拋出異常):

using(binaryReader = new BinaryReader(file.InputStream)) 
      { 
       var memoryBytes = binaryReader.ReadBytes(file.ContentLength); 
       using (var memoryStream = new MemoryStream(memoryBytes)) 
       { 
        var imageStream = Image.FromStream(memoryStream); 
        imageStream.Save(targetFolder + "\\" + context.Request["Name"] + "\\" + "picture" + ".png", ImageFormat.Png); 
       } 
      } 
+0

我試過這個。但是我得到了相同的OutOfMemoryException。 :( – Shesha

相關問題