- - PR -
アップロードしたファイルに余分なヘッダー?がついている
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-04-06 22:33
C# で WindowsフォームからWebサーバーにファイルをアップロードしています。
サーバー側は ASPで、BASPを使用しています。 クライアント側は WebClient の UploadFile を使用しています。 テキストファイルをアップロードしたところ、 ファイルは正常にアップロードできたのですが、 アップロードしたファイルの中身を確認してみると、 ヘッダーの一部と思われる内容が追加されているのです。 (下記「アップロードしてできたファイル」のContent-Disposition行など) WebClient の UploadFile で、ファイルの中身に余計なものを書いてしまうのか、 それともこれは受取側で処理しなければならないのか? ご教授ください。 ---------- 送ったファイル(ここから) ---------------- 1 サトウ 2 タナカ ---------- 送ったファイル(ここまで) ---------------- ---------- アップロードしてできたファイル(ここから)--- -----------------------8c5f6074aa0c090 Content-Disposition: form-data; name="file"; filename="member.dat" Content-Type: application/octet-stream 1 サトウ 2 タナカ -----------------------8c5f6074aa0c090 ---------- アップロードしてできたファイル(ここまで)--- ---------- クライアント -------------------- // file_name はローカルマシンで選択したファイルのフルパス // uri は WEBサーバーにあるASPのURI WebClient myWebClient = new WebClient(); myWebClient.QueryString.Add("upfile",file_name); // サーバーからのレスポンスを受け取る byte[] responseArray = myWebClient.UploadFile(uri,"POST",file_name); string msg = Encoding.ASCII.GetString(responseArray); MessageBox.Show(msg); -------------サーバーASP--------------------------- <% total = Request.TotalBytes bytes = Request.BinaryRead(total) Set basp = Server.CreateObject("basp21") localName = Request.Querystring("upfile") fileName = Mid(localName, InstrRev(localName, "\\\\\\\\") + 1) onServerName = Server.Mappath(fileName) wlen = basp.BinaryWrite(bytes,onServerName) %> <p>LOCALFILE=<%=localName%><br> SERVERFILE=<%=onServerName%><br> UPLOADED!!!</p> |
|
投稿日時: 2004-04-07 12:43
自己レスです。
サーバー側のASPには手を加えず、 クライアント側で、WebClient の UploadFileメソッドではなく、 UploadData メソッドを使用することで解決しました。 --- 以下、BASPと関わる内容なので、この会議室に書き込んでよいのかわかりませんが --- メモとして残しておきます。 理想はサーバー側の ASP では BASP の FormSaveAsメソッド を利用して ブラウザからアップロードされたときと同じにしたかったのです。 (ブラウザからはFormSaveAsで正常なファイルが作成されます) が、C#クライアントからのUploadFileでは BASP の FormSaveAsメソッドでファイルがサーバーに作れなかったので BinaryWriteメソッドに変更したところ、 ファイルが作成されるものの、ヘッダーの一部が書き込まれていたのです。 結局以下のような結果になりました。 (1)C#クライアント:WebClient/UploadFile → ASP:BASP/FormSaveAs ファイル作成× (2)C#クライアント:WebClient/UploadFile → ASP:BASP/BinaryWrite ファイル作成○ ただし余計な情報も付加 (3)C#クライアント:WebClient/UploadData → ASP:BASP/BinaryWrite 正常なファイル作成○ ただし、ブラウザからでは BASP/BinaryWrite でファイルを作成できませんでした。 よって、ブラウザで受け取るバージョンのASPと クライアントプログラムで受け取るバージョンのASPを作成することになりました。 |
1