• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FileUploadを利用しての画像保存)

FileUploadを利用しての画像保存

このQ&Aのポイント
  • ASP.NET、フレームワークは.net4.0環境で、FileUploadコントロールを使用してPOSTした画像を保存する方法について調査しています。
  • 画像のサイズが小さい場合は正常に動作しますが、2MB程度の画像を投稿するとGDI+の汎用エラーが発生し、保存ができません。
  • 修正点として、InputStreamからBitmapとして処理することで容量を超えてしまう可能性があるため、最大3MBまでアップロードできるように修正する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • shockatz
  • ベストアンサー率80% (153/191)
回答No.3

単純なHttpPostedFile.Saveではなく、Bitmapに変換して検証や操作を加えたうえで保存したい、ということならば、 HttpPostedFile.InputStreamは、MemoryStreamと違い、バッファリングをともなう入出力ストリームなので、あらかじめ正しく読み出してあげることが必要なのではないかと思います。 投稿を拝見した感じでは、宣言しただけである程度の読み込みが完了しているようですね。 それはそれでwow protected void Button1_Click(object sender, EventArgs e){ if (FileUpload1.HasFile){ HttpPostedFile postedFile = FileUpload1.PostedFile; byte[] buffer = new byte[postedFile.InputStream.Length]; postedFile.InputStream.Read(buffer, 0, postedFile.InputStream.Length); // TODO:Bitmap生成 var bitmap = (System.Drawing.Bitmap)ImgConv.ConvertFrom(buffer); // TODO:ファイルを保存 bitmap.Save(@"C:\img_save\test.jpg", ImageFormat.Jpeg); } } 連続して複数変換するときは、 postedFile.InputStream.Seek(0, SeekOrigin.Begin); もわすれずに

ginfix
質問者

お礼

詳しいご説明ありがとうございます。 imageData.InputStream.LengthがLong型で、引数として受け付けなかったので、とりあえずInt32でCastしたのですが、それで大丈夫でしょうか…あふれることもあるものですかね。 imageData.InputStream.Read(buffer, 0, Convert.ToInt32(imageData.InputStream.Length));

ginfix
質問者

補足

度々すみません。 以下コードでも同様のエラーとなってしまいました。 byte[] buffer = new byte[imageData.InputStream.Length]; imageData.InputStream.Read(buffer, 0, Convert.ToInt32(imageData.InputStream.Length)); ImageConverter ImgConv = new ImageConverter(); Bitmap bitmap2 = (System.Drawing.Bitmap)ImgConv.ConvertFrom(buffer); bitmap2.Save(temp_path, ImageFormat.Jpeg);

その他の回答 (2)

  • x-1919
  • ベストアンサー率52% (91/173)
回答No.2

Bitmap に展開してサイズを確認する件はわかりました。 確認が終わったら廃棄して、保存は FileUpdate で試してみましたか? 質問文では Bitmap の Save でエラーとなる旨が書かれてますよね。

  • x-1919
  • ベストアンサー率52% (91/173)
回答No.1

FileUpload コントロールを使ったことがないので的確な回答じゃないかもしれませんが、、、 一度 Bitmap に展開して保存する理由が不明ですが、FileUpload コントロールの SaveAs ではダメなのでしょうか? 何かセキュリティ的な対処の理由とか、質問文では省略した処理などがあって Bitmap に展開する必要があるのでしょうか。

ginfix
質問者

補足

ご回答ありがとうございます。 省略してしまいましたが、width、heightのチェックをする必要がありまして、 一度画像として展開しています。

関連するQ&A