- PR -

画像ファイルをサーバへ保存(UpLoad)する方法

1
投稿者投稿内容
タクマン
常連さん
会議室デビュー日: 2004/06/14
投稿数: 42
投稿日時: 2004-06-21 12:20
今現在、画像ファイルをサーバへUpLoadする方法について悩んでいます。
下記のソースではまず初めにファイルをbyte型の配列に格納してSQLのパラメータの値に直で入れていますが、これではDBへのUpLoadとなってしまい、サーバへのUpLoadではなくなってしまいます。

try
{
byte []img = new byte [postedfile.ContentLength];
postedfile.InputStream.Read(
img, 0, postedfile.ContentLength);
// パラメータとして設定
sqlcmd.Parameters.Add(
"@imgdata", SqlDbType.Image).Value = img;
}
http://www.sqlpassj.org/bunkakai/web/series/ado/01_pr.aspx#f1_11 より転載

今現在、FileField.postedfile.saveas(サーバの絶対パス)
で保存していますが、これだとByteコードに変換されずに直でUpすることになってしまいます。

知りたいのは、Byteコードに変換して、もう一度画像ファイルに変換する方法です。
なぜこのような処理をしなければならないかといいますと、再度Page_Loadされても、画像データを保持しておきたいからです。
そして、UpLoad処理に移ったときにByteコードのデータをもう一度画像ファイルに変換してUpLoadを行いたいと思っています。
この方法をご存知の方、ご教授お願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-21 14:05
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12450&forum=7
これはどうなりました?
これとの関連、または違いは?
なぜこれだとダメなの?
タクマン
常連さん
会議室デビュー日: 2004/06/14
投稿数: 42
投稿日時: 2004-06-21 15:43
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12450&forum=7
との関連は、画像UpLoadだけでなく、画像変換をする必要が出てきたということです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12450&forum=7
で教えていただいたサイトですと、まさにsaveAsで直でUpLoadしており、なおかつ画像変換の方法が書かれていません。
バイナリの画像データから画像ファイルへと変換する方法も知りたいのです。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2004-06-21 16:13
今日は

一度byteを経由して、保存したいので有れば下記の様にすれば出来ます。
Stream sm=FileField.postedfile.InputStream;
byte[] bt=new byte[sm.Length];
sm.Read(bt,0,bt.Length);
 必要ならここでbyte操作
FileStream fs=new FileStream(strFilePath,FileMode.Create,FileAccess.Write);
fs.Write(bt,0,bt.Length);
fs.Close();

タクマン
常連さん
会議室デビュー日: 2004/06/14
投稿数: 42
投稿日時: 2004-06-21 16:26
>rvmxさん
恐らくBitmapクラスを使うと画像ファイル形式(*.jpg, *.png, *.gifなど)を変換できると思うのですが、上記のサンプルソースのどこら辺で使えば良いのでしょうか。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2004-06-21 16:55
今日は

byteとの変換と言われていたので、ムリにbyteを経由しましたが、
BitMapで有れば下記の様にすれば出来ます。
Stream sm=FileField.postedfile.InputStream;
System.Drawing.Bitmap bm=new Bitmap(sm);
bm.Save(サーバの絶対パス,System.Drawing.Imaging.ImageFormat.Jpeg);
タクマン
常連さん
会議室デビュー日: 2004/06/14
投稿数: 42
投稿日時: 2004-06-21 17:06
>rvmxさん
なるほど
そういう方法だったんですか。
どうも、StreamクラスとBitmapクラスを組み合わせて変換する方法がわからなかったのですが、そんなに簡単に出来るとは思いませんでした。

なぜByte経由で書いたのかと言うと、参考になるソースが全てByteだったからです。
試してみます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-21 18:18
参考:
引用:

タクマンさんの書き込み (2004-06-21 17:06) より:

なぜByte経由で書いたのかと言うと、参考になるソースが全てByteだったからです。


最初に、

要求仕様:
 クライアントからサーバに画像ファイルをアップロードする
 bitmap, jpeg, gif, png で、フォーマットの相互変換を行う

と書いておけば、よけいなレス(2004-06-21 14:05〜2004-06-21 16:26)は必要なかったと思います。あなたがABCDという道で考えていても、ACDと、Bの手順を省略する方法があるかもしれません。あるいは、AEDと、まったく別の道筋で考える方が早いかもしれません。
 しかし、元の質問文ではABCまでしか書いてありません。その為、よけいな時間がかかっていますし、rvmxさんによけいな手間をかけさせています。

 仕事をする上で必要な説明手法だと思いますので、心にとめておいてください。
1

スキルアップ/キャリアアップ(JOB@IT)