![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ASP.NET、フレームワークは.net4.0環境です。。
FileUploadコンロールを使って、POSTした画像を保存するような
ものを作りたいと思っています。
FileUploadとButtonを設置して、以下のように書きました。
(C Sharpで書いたものです)
---
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
//ファイルを保存
HttpPostedFile imageData = FileUpload1.PostedFile;
using (cbitmap = new Bitmap(imageData.InputStream))
{
int test = bitmap.Width;
bitmap.Save(@"C:\img_save\test.jpg", ImageFormat.Jpeg);
}
}
}
---
画像のサイズが小さい時はうまくいくのですが、2MB少々のjpg画像を上記で
投稿しようとしたところ、Saveの箇所で以下のようなエラーが出てしまいます。
--
ExternalExceptionがキャッチされました。
GDI+ で汎用エラーが発生しました。
--
FileUPLoadの上限は4MBだったと思いますが、2MB程度で上記のような
エラーが出てしまうのは何故でしょうか?
InputStreamから、Bitmapとしているため、そこで容量を超えてしまうとか
いうこともありますか…ね…?
最大3MBほどまでUP出来るようにしたいのですが、修正すべき点について
アドバイスいただけないでしょうか。
宜しくお願いします。
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);
もわすれずに
この回答への補足
度々すみません。
以下コードでも同様のエラーとなってしまいました。
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);
詳しいご説明ありがとうございます。
imageData.InputStream.LengthがLong型で、引数として受け付けなかったので、とりあえずInt32でCastしたのですが、それで大丈夫でしょうか…あふれることもあるものですかね。
imageData.InputStream.Read(buffer, 0, Convert.ToInt32(imageData.InputStream.Length));
No.2
- 回答日時:
Bitmap に展開してサイズを確認する件はわかりました。
確認が終わったら廃棄して、保存は FileUpdate で試してみましたか?
質問文では Bitmap の Save でエラーとなる旨が書かれてますよね。
No.1
- 回答日時:
FileUpload コントロールを使ったことがないので的確な回答じゃないかもしれませんが、、、
一度 Bitmap に展開して保存する理由が不明ですが、FileUpload コントロールの SaveAs ではダメなのでしょうか?
何かセキュリティ的な対処の理由とか、質問文では省略した処理などがあって Bitmap に展開する必要があるのでしょうか。
この回答への補足
ご回答ありがとうございます。
省略してしまいましたが、width、heightのチェックをする必要がありまして、
一度画像として展開しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Debug Assertion Failed?
-
VBAでFormat がうまく使えない
-
NET USE コマンドでエ...
-
vbaでファイルを開くパス名に変...
-
ホームページビルダーの”全体の...
-
Web.Config 構成ファイルのエラー
-
実行時エラー'1004': アプリケ...
-
FileUploadを利用しての画像保存
-
Eclipseでのエラー検出の機能に...
-
ACCESS VBAのOpenForm書き方
-
EXCEL VBA 文字色を変える
-
bcpadがうまく実行できないので...
-
シェルスクリプトの実行エラー...
-
C# HttpWebRequestのエラーにつ...
-
LTspiceのTime Stepエラーについて
-
不明なソフトウェア例外(0xe06...
-
ASPでoo4o接続ができません。
-
エクセルのワークシートに、文...
-
勝手にショートカットのリンク...
-
jw cadの名前をつけて保存・・...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでFormat がうまく使えない
-
Debug Assertion Failed?
-
NET USE コマンドでエ...
-
POV-Ray についての質問です!
-
Excel ファイルに保存すると実...
-
不明なソフトウェア例外(0xe06...
-
ホームページビルダーの”全体の...
-
シェルスクリプトの実行エラー...
-
vbaでファイルを開くパス名に変...
-
エラーコード 70 「書き込み...
-
図形のクリアで実行時の1004エ...
-
ACCESS VBAのOpenForm書き方
-
Web.Config 構成ファイルのエラー
-
Access ADOで文字列を日付型へi...
-
C# HttpWebRequestのエラーにつ...
-
LTspiceのTime Stepエラーについて
-
bcpadがうまく実行できないので...
-
VB5のEXEの起動時エラー
-
xmlドキュメントから別拡張子で...
-
VBAで印刷するとエラーになって...
おすすめ情報