- PR -

ファイルのダウンロードについて

投稿者投稿内容
william
会議室デビュー日: 2007/04/25
投稿数: 16
投稿日時: 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
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-07-18 12:30
ダウンロードには特別なことをする必要は無く、リンクするだけでよいです。
静的なファイルのダウンロードは分かりますね?
*.csvのリクエストに対し、動的なコンテンツを返したい場合は
web.xmlでservlet-mappingを設定し、動的生成をするServletに処理が
流れるようにする必要があります。
さる
ぬし
会議室デビュー日: 2005/07/14
投稿数: 276
お住まい・勤務地: 実家戻ったw
投稿日時: 2007-07-18 13:13
http://grape.sapid.org/~nkaneko/blogs/index.php?catid=6
william
会議室デビュー日: 2007/04/25
投稿数: 16
投稿日時: 2007-07-18 13:55
Williamと申します。
ご返事有難うございます。

でも、今の状態はダウンロードの機能はできました。
ポップアップ画面でパスを選択したいから、如何しますか?

よろしくお願いいたします。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-07-18 14:41
引用:

williamさんの書き込み (2007-07-18 13:55) より:
ポップアップ画面でパスを選択したいから、如何しますか?



要件が理解できません。

ポップアップとはブラウザのHTMLのことですか?
それともOSのファイル選択ポップアップですか?

パスとはダウンロードしたファイルを保存するパスですか?

ブラウザの中にcsvファイルが表示されるのであれば、
ContentTypeの設定が正しくないためでしょう。
william
会議室デビュー日: 2007/04/25
投稿数: 16
投稿日時: 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ファイルのダウンロードとかぜんぜんやった事無いです、
よろしくお願いいたします。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 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()でコンテンツタイプを設定するのを忘れずに。
william
会議室デビュー日: 2007/04/25
投稿数: 16
投稿日時: 2007-07-18 20:33
nagiseさん、
有難うございます。

今9割できました。

残りの1割は:CSVファイル正しいフォルダに生成したけど、内容はおかしい。
「チウ・,チニュケネ,ラ鴣ネ,

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