Inetコントロールを使ってファイルをサーバーにアップするには?


SANA  2003-03-07 00:59:26  No: 77339

Inetコントロールを使ってファイルをサーバーに送りたいのですが、
どのようにすればよいのでしょうか?
(例)ローカルのtest.txtをhttp://Server/test.txtへ

サンプルソースを紹介していただければ幸いです。
プロトコルはHTTPを使用します。


魔界の仮面弁士  2003-03-07 02:17:30  No: 77340

通信プロトコルは HTTP を利用するとして……、
データ交換の方法としては、何を採用される予定でしょうか?
それによって、サーバー側およびクライアント側のコーディング方法も
大きく変わってきます。

例えばサーバー側がWebDAVに対応しているのであれば、それを利用する事が
できるでしょうけれど、WebDAVに対応していないのであれば、クライアントからの
HTTP要求を受け取り、それをファイルとして保存するようなページを自作して、
それをWebサーバ側に事前に配置しておく必要があるかと思います。

また、後者(ファイル保存ページを自作する場合)であるにしても、
クライアントからの送信方法としては、生データをそのまま無変換で
Request BodyとしてPOST要求するという方法もありますし、あるいは、
HTMLの「form」で送る時のように、データに適切なエンコーディング処理を
施した上で送り出すという事もできるでしょう。

そして、採用する方法によっては、たとえHTTP通信であるにしても、
  ・XMLHTTPオブジェクトを利用する
  ・Microsoft OLE DB Provider for Internet Publishingを利用する
  ・InternetExplorerオブジェクトを利用する
などの「Inet以外の通信手段」を用いた方が簡単になる場合もありえます。
(もちろん、Inetで充分な場合もありますけれどね)


SANA  2003-03-07 04:59:00  No: 77341

ご返答ありがとうございます。
以前にこちらの掲示板で下記の方法を見つけました。
(勝手に抜粋してしまって申し訳ありません)
-------------------------------------------------
ファイル受信のソース
            Dim s As String
            Dim strURL As String
            
            ' この URL は有効な URL であると仮定します。
            strURL = "http://testServer/test.txt"
        
           s = Inet1.OpenURL(strURL, 0)

           Open "d:\temp\test.txt" For Binary Access Write As #1
           Put #1, , s
           Close #1
-------------------------------------------------
この方法で受信はできたのですが、送信する方法が
わかりませんでした。
これと同じような感じで送信もできるのではないかと
考えました。
Inetを使ってFTPならPUT/GETで切り替えれるので、
HTTPでも同じようにできるのではと思いました・・・。

WebDAVは現在考えていませんので、後者の方を詳しく
教えていただきたいのですが・・・。


魔界の仮面弁士  2003-03-07 06:26:20  No: 77342

> 後者の方を詳しく教えていただきたいのですが・・・。

……と言われましても、どんなサーバーに送ろうとしているのかも
わかりませんので、詳しく書きようが無かったりします。。。(^_^;)

とりあえずVBから離れて、HTMLでの送信の場合の例に挙げますが、HTMLでは

<form method="post" action="送信先のURL" enctype="multipart/form-data">
 <input type="file" name="F">
 <input type="submit" value="アップロード">
</form>

のようにして、ファイルの送出ができます。
# 横取り丸+InetSpyなどのソフトを使うと、どのようなデータが
# サーバーとクライアントでやり取りされているのかを見る事が
# できます。一度、どんな内容がやり取りされているのかを見ておくと、
# どのようなデータを送れば良いのか、わかってくるかと思います。

という事は、VBからもそれと同じ内容のデータを送るようにすれば良い事になります。
たとえばこの場合、元データを自分でエンコードした上で、Execute メソッドの
第4引数に、以下の文字列を追加指定する事になります。
  "Content-Type: multipart/form-data" & vbCrLf
(エンコードの方法等に関しては、ご自身で調べてみてください)

…ただし、これはあくまでクライアント側の処理だけです。

サーバー側では、送られてきたファイルデータを、
実際のファイルとして保存するという作業を行わなくてはいけません。
つまり、Webサーバー側でのコーディングも必要なわけです。
(WebDAVの場合は、ファイルコピーや削除などの命令が規格化されているので、
  特にWebサーバー側にプログラムを用意せずとも済むのですけれどね)

で。このサーバー側のコードに関しては、どんなWebサーバーを使っているのか、
そしてサーバー側のパーミッションをどのように設定しているかなどによって
かわってきます。そのため、具体的な回答はできません。m(_ _)m

……あるいは、HTMLでの通信を真似るのを止めて、HTTPを使った
独自のデータ交換を行うという方法もあるでしょう。
ただしこの場合も、サーバー側とクライアント側の双方に
プログラムを用意する必要があるという事にはかわりありませんけれどね。


SANA  2003-03-07 17:54:45  No: 77343

ご返答ありがとうございます。
私の知識不足のため、答えにくい質問をしてしまって
申し訳ありません。

ちょっとWebDAVについても勉強してみます。
また改めて質問したいと思いますので、
よろしくお願いします。


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

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






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