Webへファイルをアップロードしたい

タグの編集
投稿者 ぽこた  (社会人) 投稿日時 2013/5/31 13:41:17
このサイトのサンプルプログラムで、Webからファイルをダウンロードするのはできましたが
逆にWebへファイルをアップロードする方法がよくわかりません。

MSDNでこんな例文を見つけましたが、404エラーです。

My.Computer.Network.UploadFile(
 "C:\Order.txt",
 "http://www.pocota.com/upload.aspx","ID","password")


Webへファイルをアップロードする方法を教えて下さい。
投稿者 shu  (社会人) 投稿日時 2013/5/31 14:39:26
どぼんさんのサイトのものです
http://dobon.net/vb/dotnet/internet/webrequestpost.html

http://www.pocota.com/upload.aspx
が存在していて
POST用のフィールド名としてfileが用意されている必要があります。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2013/5/31 23:29:20
Web サイトにファイルをアップロードする方法としては、
 (1) Web フォルダー/WebDAV (http または https での PUT メソッド)
 (2) RFC1867 (http または https での POST メソッド)
 (3) FTP (File Transfer Protocol)
 (4) SFTP (SSH File Transfer Protocol)
 (5) FTPS (File Transfer Protocol over SSL/TLS)
などが挙げられます。

他にもいろいろな手法がありますが、どの方法が使えるのかはサーバーによって異なります。

どの方法がサポートされているのかは、そのサーバーの管理者にお問い合わせください。
上記以外のアップロード方法が採用されているサーバーもあります。


1 の場合は、WebClient サービスや MSDAIPP.DSO プロバイダーを通じてアクセスします。
ここでいう WebClient とは、System.Net.WebClient クラスのことではなく、
Windows サービスの方を指しています。
MSDAIPP (Microsoft Data Access Internet Publishing Provider) の方は
OLE DB Provider の一種であり、VB からは ADODB.Record などを通じて利用できますが
バージョンによって日本語ファイル名の扱い方が異なるので注意が必要です。
これらの他、System.Net.HttpWebRequest クラスを通じて通信することもできます。


2 の場合は、御提示の My.Computer.Network.UploadFile が使えます。
あるいは、System.Net.HttpWebRequest を通じて利用することもできます。
いずれの方法を取るにしても、サーバー側には、POST でアップロードされてきた
ファイルを受け取って保存するための Web ページが必要です(Upload.aspxなど)。


3 の場合も、御提示の My.Computer.Network.UploadFile が使えます。
My.Computer.Network.UploadFile("C:\Folder01\Sample.TXT", "ftp://example.com/Folder01/Sample.TXT", user, pass)
より細かい制御(フォルダ作成など)が必要な場合は、System.Net.FtpWebRequest を使えます。
System.Net.FtpWebRequest の具体例は下記などをご覧ください。
http://dobon.net/vb/dotnet/internet/ftpwebrequest.html


4 の場合には、VB にはそのための簡単な仕組みが用意されていないため、
適当な SFTP クライアント(WinSCP など)を用意し、それを VB から
コマンドライン起動するなどして対応することになるでしょう。5 も同様です。
投稿者 ぽこた  (社会人) 投稿日時 2013/6/1 00:40:23
さくらのインターネットライトプランではFTPがOKでしたので、(3)の方法でやってみました。

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        Try
            My.Computer.Network.UploadFile(
                "d:\sample.txt""ftp://hostname.sakura.ne.jp/www/sample.txt",
                "loginID""password")
            TextBox1.Text = "アップロードできました。"
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
End Class

これでうまくいきました!

うまくいかない原因の大半は、パラメータが間違っていることによるものでした。
ちなみに "ftp://hostname.sakura.ne.jp/www/sample.txt" の「/www」は、
さくらのローカルの初期フォルダに由来するもので、いらないプロバイダも多いと思います。

わかってしまえば簡単ですね。詳しい説明をありがとうございました。
とてもよくわかりました。ありがとうございます。