ファイル(画像)をサーバへアップロードしたいのですが


年寄りの冷や水  2004-10-12 03:52:23  No: 85959

いつもお世話になっています。
表題の件ですが、ファイル(JPG)をWEB上のサーバへVBでアップしたい
とがんばっています。

HTMLのページでは次のような感じです。
<HTML><HEAD><TITLE></TITLE></HEAD><BODY>
<FORM method="POST" action="http://xxxx.xxx.jp/xxxx.cgi">
<INPUT size="20" type="FILE" name="SEND_IMAGE_FINE">  ←※選択するファイル
<INPUT type="submit" value="送信"></FORM>
</BODY>
</HTML>

※選択するファイルは固定です。
C:\SAMPLE\SAMPLE1.jpg

これをVBで代替して送信したいと悩んでいます。
Dim SEND_DATA  As String
Dim STR_URL    As String
SEND_DATA = "IMAGE_NAME=SAMPLE1"
STR_URL = "http://xxxx.xxx.jp/xxx.cgi"
  Inet1.Execute STR_URL, "POST", SEND_DATA, _
   "Content-Type: application/x-www-form-urlencoded" & vbCrLf

ここでC:\SAMPLE\SAMPLE1.jpgどのように指定してよいかわかりません。

丸一日HP調べましがわかりません。何卒ご教示お願いします。


年寄りの冷や水  2004-10-16 10:51:26  No: 85960

なかなかご回答がいただけないので、質問の方向を変えたいと
思います。

質問:
HTTP & POST でバイナリファイルを送信することができるので
しょうか?SMTPなどでは、BASE64でデータを変換する必要があ
ると認識しています。ただIEの場合、簡単にファイルを送信
できるのですが(<input type="file">)やっぱりASCへの変換
をIEで自動的に行っているのでしょうか。
受取側でファイルに落とすにはバイナリに変換する必要がある
とおもうのですが。
CGIは送り手側の変換方式(BASE64等々)
を認識しないとバイナリへ復号化することはできないんではな
いでしょうか。受取側はどうやって送り手側の変換方式を認識
できるんでしょうか??などなど疑問が一杯です。

どうか御教示お願いします。


魔界の仮面弁士  2004-10-17 02:44:47  No: 85961

> なかなかご回答がいただけないので、

 <form enctype="multipart/form-data">
   <p><input type="file"></p>
 </form>

での転送をプログラム的に行うのは、手順が少々面倒なので、
回答を控えていました…。(^^;

とりあえず、変換手順については RFC 2388 を参照してみてください。
http://www.ietf.org/rfc/rfc2388.txt
http://www.studyinghttp.net/rfc_ja/rfc2388.ja

実際に流れるデータについては、フリーソフトのInetSpy等にて
確認する事ができます。

> 表題の件ですが、ファイル(JPG)をWEB上のサーバへVBでアップしたい
> とがんばっています。

アップロード先のサーバー側の設定はどうなっているのでしょうか?
確かに、<input type="file">というHTML要素は用意されていますが、
サーバー側がそれに対応しているかどうかは、別の問題ですよね。
# FTPのみの対応をうたっているサーバーもあるでしょうし。

> HTTP & POST でバイナリファイルを送信することができるのでしょうか?
POST に拘らないのであれば、PUT を使うことはできませんか?

たとえば最近の環境ならば、サーバ側がWebDAVに対応している場合、
  FileCopy "C:\TEST.JPG", "\\127.0.0.1\folder\test.jpg"
のように、普通のネットワーク共有のようにして扱うだけで、
自動的に HTTP PUT にてファイルが送られますよ。

> HTTP & POST でバイナリファイルを送信することができるのでしょうか?
httpでのやり取りを行うのは、XMLHttpRequest (XMLHTTP) を使うのが
簡単です。Microsoft XML Parser を参照設定して、こんな感じですね。

  Dim B() As Byte
  Dim oHttp As XMLHTTP
  B = 送信データ

  Set oHTTP = New XMLHTTP40  'MSXML4の場合
  XMLHTTP.Open "POST", URL, False
  XMLHTTP.Send CVar(B)

この場合はファイルのバイナリをそのまま送っているだけですが、
必要に応じて、適切なエンコードを施せば、WebDAV も扱えますし、
<input type="file"> 相当の処理にも利用できます。

# 以前、某所に書いたサンプル。
http://www.users.gr.jp/ml/archive/viewer.aspx?name=vb&no=9563

# WebDAV の例。
http://support.microsoft.com/kb/296713/ja


年寄りの冷や水  2004-10-17 04:43:33  No: 85962

魔界の仮面弁士様、いつも親切なご回答ありがとうございます。
早速ご指導いただいた内容での勉強をはじめたいと思います。
取り急ぎお礼まで。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加