- - PR -
Webclientクラス UploadFileについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-04-01 16:36
いつも参考にさせていただいております。 過去ログを参照してもいまいちわからなかったので、書き込みさせていただきます。 現在、Windowsアプリケーションの開発を行っており、 WebclientクラスのUplodeFileを使ってサーバにファイルアップロードを行いたいと思ってます。 「C:\test.Txt」を「http://localhost:81/test.Txt」としてアップロードしたいのですが、以下のようなエラーが出ます。 「501:実装されていません」 そこで質問です。 【1】UploadFile (URI,Method,FilePath)のURIはアップロードされたファイルを処理するアプリケーションを指定するのでしょうか? 【2】アップロードされたファイルを処理するアプリケーションを用意する場合、 どのような形式でファイルはアップロードされてくるのでしょうか?(バイナリ形式とか・・?) なにとぞ力をお貸しください。 よろしくお願いします。 以下参考にソースを載せときます。 Dim myWebClient As New System.Net.WebClient Try Dim responseArray As Byte() = _ myWebClient.UploadFile _("http://localhost:81/test.Txt", "PUT", "C:\test.Txt") MsgBox("アップロードが完了しました。") myWebClient.Dispose() Catch eException As Exception myWebClient = Nothing MsgBox(eException.Message, MsgBoxStyle.Exclamation) End Try | ||||
|
投稿日時: 2004-04-01 16:39
開発環境などを書き忘れたので。。。
OS:Windows2003Server 開発ツール:VisualStudio.NET 2003 です。 よろしくお願いします。 | ||||
|
投稿日時: 2004-04-01 16:51
ステータス501というのはサーバーが要求を処理する機能がない場合だと思いますので、サーバーの問題かもしれませんね。
普通にブラウザでアップロードはできるんですか? 参考: http://www.studyinghttp.net/response.html#Code501 | ||||
|
投稿日時: 2004-04-01 17:02
一郎さん、ありがとうございます。
ASP.NETのサンプルなどでよくあるINPUT TYPE=FILEを利用したファイルアップロードを作成してみたところ、 しっかりアップロードできてました。 サーバーが要求を処理する機能がないということですと、やはりURIの指定はアップロードされたファイルを処理するアプリケーションのURIになるのでしょうか。。。。 | ||||
|
投稿日時: 2004-04-01 17:21
PUTの場合は、URIはリソースが生成される場所だそうです。
それにPUTメソッドはWebアプリケーションで処理しているわけではありませんしね。 試したINPUT TYPE=FILEによるアップロードとWebClientによるアップロードのそれぞれのリクエスト内容を見て、比べることはできませんかね。 StudyingHTTPさんによると
だそうです。 WebClientの方では良く分からないヘッダが付いている、というのが原因かも。 参考: http://www.studyinghttp.net/request.html#PUT -------------- StudyingHTTPさんには いつもお世話になってます | ||||
|
投稿日時: 2004-04-01 18:22
一郎さん、ありがとうございます。
調べてみますと、いいたいのですが、 ログを読み取る力がないです。ごめんなさい(TT #IISのログでINPUT TYPE=FILEの方はPOSTで送信してる位しかわからないです。。。 ちなみにWindowsアプリケーションでPUTしたときのログは以下のようになってました。 #Software: Microsoft Internet Information Services 6.0 #Version: 1.0 #Date: 2004-04-01 08:46:47 #Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status 2004-04-01 08:46:47 127.0.0.1 PUT /test.Txt - 81 - 127.0.0.1 - 501 0 0 あまりにもわからないので、とりあえず共有フォルダを作成して、 File.Copyを使うことにしました。。。。 (共有フォルダってあたりが微妙なのですが) でもなでできなかったのかは気になります! | ||||
|
投稿日時: 2004-04-01 19:36
おおお、勘違いしてました。というより思い込みかな。 INPUT TYPE=FILEもPOSTを使うんですね。PUTだと思ってた。 <Form>にenctype="multipart/form-data"を付けるとファイルのデータもリクエストにくっつけてくれるようになるんですね。実際にやってみましたよ。 これじゃINPUT TYPE=FILEによるアップロードとWebClientによるアップロードのそれぞれのリクエスト内容を比べても意味無いわな。 やっぱりサーバーがPUTに対応していないんじゃないでしょうか。 セキュリティの関係でデフォルトでは使えないんじゃないんですかね。 | ||||
|
投稿日時: 2004-04-01 19:39
IIS6.0 って、WebDAV はデフォルト無効じゃなかったでしたっけ。
もちろん、PUT メソッドは、WebDAV 用というわけではないですが、WebDAV ででもなければ使う必要がないですよね。 WebDAV 無効時に PUT した時に、501 で帰ってくるのかどうかはよくわかりませんが。 WebDAV 有効にしてやってみるというのは、どうでしょう。 |