編集
私が(nico_ekitoによるコメントから)学んだことから、ファイルをダウンロードするためにajax呼び出しを使用することはできません。解決策は、ここ<iframe>
で説明するように、ファイルをダウンロードする非表示を作成することです。
問題:ブラウザにダウンロードダイアログが表示されません。任意のブラウザ-ff、opera、chrome、safari、つまり。
私はファイルの提供に関するドキュメントを読み、この質問を見つけ、これに基づいて次のように書いています。
Controller.response().setContentType("text/csv");
Controller.response().setHeader("Content-Disposition", "attachment;filename=public/export/filename.csv");
Controller.response().setHeader("Cache-control", "private");
return ok(CSV.export(data, filename));
クラスはどこCSV
にありますか:
public class CSV{
public static File export(Map<String, String> data, String filename){
String csv = data.get("data[saveMe]");
try {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("public/export/" + filename), "UTF-8"));
bw.write(csv);
bw.newLine();
bw.flush();
bw.close();
}catch(UnsupportedEncodingException e){}
catch(FileNotFoundException e){}
catch(IOException e){}
File downloadMe = new File("public/export/" + filename);
return downloadMe;
}
}
クライアント側では、リクエストdojo
を送信するために使用しますPOST
(私も試してみましたがGET
、結果は同じです):
xhr.post({
url: '/exportData/',
content: {
saveMe: str
}
}).then(function(response){
//do sth
});
応答ヘッダーは次のようになります。
Cache-Control private
Content-Disposition attachment;filename=public/export/filename.csv
Content-Type text/csv
Transfer-Encoding chunked
POST
firebugのタブには、適切なcsv形式で適切なデータが表示されます。csvスタイルでデータをフォーマットするには、dojox / grid / Enhanced / plugins / exporter/CSVWriterを使用します