- - PR -
ファイルのダウンロードについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-07-18 12:17
Williamと申します。
今は下記のトラブルがありますので、本当にできませんでした。 先輩を助けてもらって頂けないでしょうか? 要望は: ボタン押したら、保存パスを選択して、保存名は「***.csv」。 Strutsはこの部品ありますか? 下記のタグ「file」はupload用の部品ので、downLoadに関しての部品有りますか? <input name="filepath" type="file" id="filepath"> 環境:Struts 3.2 Weblogic 10 Oracl 10 | ||||
|
投稿日時: 2007-07-18 12:30
ダウンロードには特別なことをする必要は無く、リンクするだけでよいです。
静的なファイルのダウンロードは分かりますね? *.csvのリクエストに対し、動的なコンテンツを返したい場合は web.xmlでservlet-mappingを設定し、動的生成をするServletに処理が 流れるようにする必要があります。 | ||||
|
投稿日時: 2007-07-18 13:13
http://grape.sapid.org/~nkaneko/blogs/index.php?catid=6
| ||||
|
投稿日時: 2007-07-18 13:55
Williamと申します。
ご返事有難うございます。 でも、今の状態はダウンロードの機能はできました。 ポップアップ画面でパスを選択したいから、如何しますか? よろしくお願いいたします。 | ||||
|
投稿日時: 2007-07-18 14:41
要件が理解できません。 ポップアップとはブラウザのHTMLのことですか? それともOSのファイル選択ポップアップですか? パスとはダウンロードしたファイルを保存するパスですか? ブラウザの中にcsvファイルが表示されるのであれば、 ContentTypeの設定が正しくないためでしょう。 | ||||
|
投稿日時: 2007-07-18 17:07
nagiseさん、
すみませんでした、私が説明不足です。 現在javaActionのソース: ArrayList outList = new ArrayList(); outList.add(outdata); String downloadPath = cntxt.getAdress(); //「D:\CSVOUTPUT」 String downloadFile = cntxt.getFileName() + ".csv"; // 「mydwload.csv」 String[] csvTitle = {"A", "B", "C", "D", "E", "F" }; response.setContentType("Application/Octet-Stream-Dummy"); response.setHeader("Content-Disposition", "attachment; filename=\"" + downloadFile + "\""); //CSV出力 createCSV(outList,csvTitle,downloadPath,downloadFile); DataStreamInfo info = new DataStreamInfo(new FileInputStream(downloadPath+ downloadFile),downloadFile); DownloadAction.setStreamInfo(request, info); /** * CSV出力処理 * @throws IOException */ private void createCSV(List list, String[] sTitle,String path,String file) throws IOException { //出力先の生成 File csvFile = new File(path + file); FileWriter csvFileWriter = new FileWriter(csvFile); BufferedWriter bufwrite = new BufferedWriter(csvFileWriter); try{ //タイトルの出力 StringBuffer outbuf = new StringBuffer(); for(int i = 0;i < sTitle.length;i++ ){ outbuf.append(sTitle[i]); if (sTitle.length > (i+1) ) { outbuf.append(','); } } //CSVファイルに出力 bufwrite.write(outbuf.toString()); //改行を出力 bufwrite.newLine(); //内容の出力 for(int i =0;i < list.size();i++){ String[] outdata = (String[])list.get(i); outbuf.delete(0,outbuf.length()); for(int ii=0;ii < outdata.length;ii++) { outbuf.append(outdata[ii]); if (outdata.length > (ii+1) ) { outbuf.append(','); } } //CSVファイルに出力 bufwrite.write(outbuf.toString()); //改行を出力 bufwrite.newLine(); } } finally { bufwrite.close(); csvFileWriter.close(); } } 結果は:二つCSVファイル作成した、でも一つはJspの内容、もう一つは内容があってるけど、保存のパスが間違います。 要望:ポップ画面に選択したのパスに正しいCSVファイルを生成する。 環境:Struts 3.2 Weblogic 10 DB: Oracle 10 IE6 すみませんですが、私CSVファイルのダウンロードとかぜんぜんやった事無いです、 よろしくお願いいたします。 | ||||
|
投稿日時: 2007-07-18 17:32
通常のWebページはHTTPのリクエストに対し、HTMLのファイルが送られます。
CSVのダウンロードではHTTPのリクエストに対し、CSVのファイルが送られます。 違いは僅かです。 1.書き出す内容がHTMLかCSVかが違うこと 2.ブラウザが送られてきたデータの種別を判別するために用いるContentTypeの設定が違うこと 提示されたソースではFileへの書き出しなどをしていますが、必要ありません。 StrutsなどのフレームワークやJSPを使わない基礎のServletを理解していますか? HttpServletResponse.getOutputStream()でServletOutputStreamを取得し、 そこにHTMLファイルを書き出します。 JSPは実行時には上記の処理をするServletにコンパイルされて動作します。 CSVダウンロードはHTMLファイルがCSVファイルになっただけです。 ですから、JSPでCSVファイルを書き出すこともできますし、Strutsで書き出すことも出来ます。 単にHTMLの代わりにCSVを書けばよい。 あとはHttpServletResponse.setContentType()でコンテンツタイプを設定するのを忘れずに。 | ||||
|
投稿日時: 2007-07-18 20:33
nagiseさん、
有難うございます。 今9割できました。 残りの1割は:CSVファイル正しいフォルダに生成したけど、内容はおかしい。 「チウ・,チニュケネ,ラ鴣ネ, |