- PR -

Webclientクラス UploadFileについて

投稿者投稿内容
HIRO
会議室デビュー日: 2004/04/01
投稿数: 8
投稿日時: 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
HIRO
会議室デビュー日: 2004/04/01
投稿数: 8
投稿日時: 2004-04-01 16:39
開発環境などを書き忘れたので。。。

OS:Windows2003Server
開発ツール:VisualStudio.NET 2003
です。

よろしくお願いします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-01 16:51
ステータス501というのはサーバーが要求を処理する機能がない場合だと思いますので、サーバーの問題かもしれませんね。
普通にブラウザでアップロードはできるんですか?

参考:
http://www.studyinghttp.net/response.html#Code501
HIRO
会議室デビュー日: 2004/04/01
投稿数: 8
投稿日時: 2004-04-01 17:02
一郎さん、ありがとうございます。

ASP.NETのサンプルなどでよくあるINPUT TYPE=FILEを利用したファイルアップロードを作成してみたところ、
しっかりアップロードできてました。

サーバーが要求を処理する機能がないということですと、やはりURIの指定はアップロードされたファイルを処理するアプリケーションのURIになるのでしょうか。。。。

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-01 17:21
PUTの場合は、URIはリソースが生成される場所だそうです。
それにPUTメソッドはWebアプリケーションで処理しているわけではありませんしね。

試したINPUT TYPE=FILEによるアップロードとWebClientによるアップロードのそれぞれのリクエスト内容を見て、比べることはできませんかね。
StudyingHTTPさんによると
引用:

エンティティを受ける側は、理解できなかったり実装していないようないかなる Content-* ヘッダ (例えば Content-Range 等) も無視してはならず、そのような場合には 501 (Not Implemented) レスポンスを返さなければならない。


だそうです。
WebClientの方では良く分からないヘッダが付いている、というのが原因かも。

参考:
http://www.studyinghttp.net/request.html#PUT


--------------
StudyingHTTPさんには
いつもお世話になってます
HIRO
会議室デビュー日: 2004/04/01
投稿数: 8
投稿日時: 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を使うことにしました。。。。
(共有フォルダってあたりが微妙なのですが)

でもなでできなかったのかは気になります!


一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-01 19:36
引用:

HIROさんの書き込み (2004-04-01 18:22) より:
#IISのログでINPUT TYPE=FILEの方はPOSTで送信してる位しかわからないです。。。


おおお、勘違いしてました。というより思い込みかな。
INPUT TYPE=FILEもPOSTを使うんですね。PUTだと思ってた。
<Form>にenctype="multipart/form-data"を付けるとファイルのデータもリクエストにくっつけてくれるようになるんですね。実際にやってみましたよ。

これじゃINPUT TYPE=FILEによるアップロードとWebClientによるアップロードのそれぞれのリクエスト内容を比べても意味無いわな。

やっぱりサーバーがPUTに対応していないんじゃないでしょうか。
セキュリティの関係でデフォルトでは使えないんじゃないんですかね。
omatsu
常連さん
会議室デビュー日: 2002/08/29
投稿数: 20
投稿日時: 2004-04-01 19:39
IIS6.0 って、WebDAV はデフォルト無効じゃなかったでしたっけ。
もちろん、PUT メソッドは、WebDAV 用というわけではないですが、WebDAV ででもなければ使う必要がないですよね。
WebDAV 無効時に PUT した時に、501 で帰ってくるのかどうかはよくわかりませんが。
WebDAV 有効にしてやってみるというのは、どうでしょう。

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