2015-12-15 75 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

相关问题