用Play下载.csv!骨架

时间:2012-08-23 11:35:16

标签: csv download playframework-2.0

修改

根据我所学到的(来自nico_ekito的评论),无法使用ajax调用来下载文件。解决方案是创建一个隐藏的<iframe>,用于下载文件,描述为here


问题: 浏览器不显示下载对话框。任何浏览器 - ff,opera,chrome,safari,即。

我阅读了有关服务文件的docs,找到了this question,并在此基础上写道:

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
firebug中的

POST选项卡以适当的csv格式显示正确的数据。要使用csv样式格式化数据,请使用dojox/grid/enhanced/plugins/exporter/CSVWriter

1 个答案:

答案 0 :(得分:3)

我认为无法从Ajax请求下载文件,请参阅此问题:Allow User to Download File using Ajax

您应该按照问题中的建议使用iframe,或者使用包含数据的标准HTML表单,并在此表单上发帖。