0

私は〜10Mbの大きな画像をアップロードしていると私は、次のコードを持ってスロー:HttpPostedFileBase画像には例外

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

いつかそれがGDI+ generic errors時々、Out of Memoryをスローします。私は次のコードでコンソールアプリケーションでこれを再現することはできません:

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

これらの例外の原因は何ですか? 1つのメモ:小さな画像の場合はすべてがうまくいきます。

+0

あなたのWebサーバが使用することができますどのくらいのメモリの制限があります。 (アプリケーションプールの詳細設定にアクセスできる人がどれだけいるかはわかります)。 Webサーバー上のファイルは生の形式であることに注意してください。オンデマンドでメモリが取得されるため、コンソールアプリケーションでは再現できません。 –

答えて

0

内のブロックを使用して使用することができますthis-

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(); 
    } 
} 

など何かにコード変更してみてください私の場合に適用される。画像そのものが壊れていないか、ビットが間違っています。問題は私が32 bit modeでデバッグしていたことでした。 VS2015でこの設定を変更するとすぐに、それは魅力的に機能しました。 Image.FromStreamは、大きな画像には多くのRAMが必要です。

ツール - >オプション - >プロジェクトおよびソリューション - > Webプロジェクト - > 64ビットを使用して...

0

Refer- out of memory Image.FromFile

私はあなたが(ブロックを使用して)使い捨てのコードブロックを使用しているので、あなたはコンソールアプリでこれを再現することができない理由があると思います。

はあなたが、私は多くの類似の例外の答えを読んだことがあるし、どれができたあなたのために、LOOP-

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); 
      //... 
     } 
    } 
} 
+0

実際にアップロードされる画像は1つだけです。私はブロックを使用しようとし、それはまだ同じ例外をスローします。ところで、画像はアップロードされ、ディスクから開かれません。 –

関連する問題