- PR -

アップロードしたファイルに余分なヘッダー?がついている

1
投稿者投稿内容
GO-TEN
常連さん
会議室デビュー日: 2003/12/07
投稿数: 20
投稿日時: 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>
GO-TEN
常連さん
会議室デビュー日: 2003/12/07
投稿数: 20
投稿日時: 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

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