使用BinaryReader时如何避免OutOfMemoryException

时间:2015-12-15 04:20:23

标签: c# image memorystream binaryreader

您好我正在申请工作,我们为用户提供更改其个人资料图片的选项。

我正在使用文件上传控件来选择文件。它允许最大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);
    }
}

我犯了什么错误?或者,请建议任何其他方法来保存图像。

提前致谢!!!任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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);
                }
            }