2

編集

私が(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

POSTfirebugのタブには、適切なcsv形式で適切なデータが表示されます。csvスタイルでデータをフォーマットするには、dojox / grid / Enhanced / plugins / exporter/CSVWriterを使用します

4

1 に答える 1

3

Ajaxリクエストからファイルをダウンロードすることはできないと思います。この質問を参照してください:ユーザーがAjaxを使用してファイルをダウンロードできるようにする

質問で提案されているようにiframeを使用するか、データを含む標準のHTMLフォームを使用して、このフォームに投稿する必要があります。

于 2012-08-23T14:09:36.643 に答える