HttpPostedFileBase 到 Image 抛出异常

HttpPostedFileBase to Image throws exceptions

我正在上传一张 ~10Mb 的大图片,我有以下代码:

public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
    foreach (var file in files)
    {
        var image = Image.FromStream(file.InputStream, true, true);
        ...
    }
}

有时会抛出 Out of Memory,有时会抛出 GDI+ generic errors。我无法使用以下代码在控制台应用程序中重现此内容:

using (FileStream stream = File.Open(@"d:\test.jpg", FileMode.Open))
{
    var image = Image.FromStream(stream);
}

这些异常的原因可能是什么?请注意:对于小图像,一切都很好。

参考- out of memory Image.FromFile

我认为您无法在控制台应用程序中重现此内容的原因是因为您使用的是一次性代码块(using 块)。

试着把你的代码改成这样-

public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
    foreach (var file in files)
    {
        fs = new FileStream(image_url, FileMode.Open, FileAccess.Read);    
        img = Image.FromStream(fs);  
        var image = Image.FromStream(fs);
        ...

        //after you are done call below line
        fs.Close();
    }
}

或者您可以在 for 循环中使用 using 块-

public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
    foreach (var file in files)
    {
        using (FileStream stream = File.Open(<give_file_URL_here>, FileMode.Open))
        {
            var image = Image.FromStream(stream);
            //...
        }
    }
}

我已经阅读了很多类似例外的答案,none 可以应用于我的案例。图像本身没有损坏或有不正确的位。问题是我在 32 bit mode 中调试。一旦我在 VS2015 中更改此设置,它就非常有效。似乎 Image.FromStream 需要很多 RAM 来处理大图像。

Tools -> Options -> Projects and Solutions -> Web Projects -> Use the 64 bit...