![](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ランキング
-
VBAでFormat がうまく使えない
-
pythonをjupiter notebookからm...
-
VB5のEXEの起動時エラー
-
エラーコード 70 「書き込み...
-
EXCELを開くとエラーがでます。
-
robots.txt
-
【Win32Api】 ERROR_BAD_UNIT ...
-
フォルダをパソコンから削除し...
-
jw cadの名前をつけて保存・・...
-
ショートカットファイルが開け...
-
WIN10にアップデートしたら
-
フォルダを間違って削除しない...
-
MS-DOSゲームってどうやればで...
-
アイコンを変更したフォルダを...
-
勝手にショートカットのリンク...
-
パソコン(Win10)から削除してい...
-
C:\\Users\\All Users\\Applica...
-
保存時の保存場所に違いはある...
-
SSDで完全削除は不可能?
-
Dropbox 容量が上限に達しました
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでFormat がうまく使えない
-
Debug Assertion Failed?
-
NET USE コマンドでエ...
-
Web.Config 構成ファイルのエラー
-
vbaでファイルを開くパス名に変...
-
エラーコード 70 「書き込み...
-
Excel ファイルに保存すると実...
-
POV-Ray についての質問です!
-
シェルスクリプトの実行エラー...
-
Access ADOで文字列を日付型へi...
-
不明なソフトウェア例外(0xe06...
-
ホームページビルダーの”全体の...
-
C# HttpWebRequestのエラーにつ...
-
ASP.NETでのランタイムエラー?...
-
EXCELを開くとエラーがでます。
-
【ASP】500エラーが発生する【A...
-
LTspiceのTime Stepエラーについて
-
VBAで印刷するとエラーになって...
-
ACCESS VBAのOpenForm書き方
-
Eclipseでのエラー検出の機能に...
おすすめ情報