Webブラウザからファイルを選択し、ファイルの中身をブラウザに表ヲするプログラムを書いています。
環境は、
Web三舗環境 OS:WindowsXP IIS:5.0
虎憶歡環境 OS:WindowsXP IE 6.0sp1
Delphi:5.0ent です。宜しくお願いします。
ブラウザから[multipart/form-data]形ョでPOSTしたEXCELファイルの中身のデータを取り込もうとしているのですが、Request.Contentは下記のように文字化けてしまいます。
-----------------------------45512380616373 Content-Disposition: form-data; name="get_file"; filename="spot_rate.xls" Content-Type: application/vnd.ms-excel 佻燹ア >  )   (  ヘノ€ ーチ \ p B ーa タ = ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサッヲサヲサヲサシヲサヲサヲサスヲサヲサ・
(以下省略)
ブラウザからテキストファイルを選択してPOSTする分には全く問題がありません。EXCELファイルのようなバイナリデータを取得するには、CGI側でなんらかの変換をする必要があるのでしょうか。それともRequest.Contentからデータを取得するのではなく別の方法があるのでしょうか。ご教授いただければと思います。宜しくお願い致します。
Excelファイルはバイナリですから、それであっています。
RFC1867あたりを調べてみてください。
簡単に説明すると、Requestで来るヘッダの内容は、CRLFで区切られています。
multipartは、boundaryと呼ばれる--から始まる行で区切られます。
区切られた各パートの先頭には、ヘッダがあります。ヘッダの後、CRLFCRLFで区切られて、Bodyとなります。
この辺のことは、RFCに載っています。インターネットの標準仕様がRFCですので、Webアプリを含め、インターネット関連のアプリ開発の時には、該当するRFCを探して目を通すと良いです。
ここ↓とか参考になりませんか?
ソフトの砂場(ファイルのアップロード)
http://www.yamamoto-works.jp/sandbox/upload.htm
にしの様、@っしー様、早々にお返事を頂きありがとうございます。現在はBody情報とContent-Type情報をstring型で取得し、Response.ContentTypeとResponse.Contentに返すことで、選択したファイルを返すことができました。
ありがとうございました。これから取得したデータをエクセル形式で一旦サーバに保存し、中身のデータをブラウザに返す手順にしようかと思っています。その時につまづいたらまたご質問させていただこうかと思っています^^;本当にありがとうございました。
ツイート | ![]() |