【问题标题】:How do I serve csv files using java spark?如何使用 java spark 提供 csv 文件?
【发布时间】:2017-05-28 01:32:45
【问题描述】:

我正在使用spark 为我正在编写的 Web 应用程序运行服务器端。我搜索了一些文档,但我发现是空的..有没有办法将数据提供给前端,以便它自动为用户下载为 csv 文件?我试图用作 csv 的数据看起来像这样。

// example data... returned by "getData()"

JSONArray test = new JSONArray()
    .put(
        new JSONArray().put("foo").put("bar")
    )
    .put(
        new JSONArray().put(1).put(2)
    );


// route
get("/csv/:path", "application/json", (req, res) -> {
    res.type("text/csv");
    JSONArray reply = getData(req);
    return data; 
});

我正在查看文档的 ResponseTransformers 部分,但我不知道如何将我的数据作为可下载的 csv 文件而不是 json 对象提供。我假设 ResponseTransformer 需要以某种方式进行子类化,但我找不到一个例子来做我想做的事。谁能给我一个例子,或者向我指出一些解释如何做到这一点的文档的方向?

编辑:在 javascript 方面,我能够像这样调用我的路线。

window(route);

这允许我在我的计算机上选择一个程序来下载响应。然而,数据在记事本中是这样的

[["foo","bar"],[1,2]]

所以,关闭.. 但不是一个 csv 文件。我希望输出看起来更像这样。

foo,bar
1,2

【问题讨论】:

    标签: java csv download response spark-java


    【解决方案1】:

    我认为您可以像 this answer 那样使用 StringBuilder 来呈现您的 csv 文件。我也认为您请求的第二个参数"application/json" 也可以删除。它看起来像这样:

    // route
    get("/csv/:path", (req, res) -> {
    res.type("text/csv");
        StringBuilder sb = new StringBuilder();
        sb.append("id");
        sb.append(',');
        sb.append("Name");
        sb.append('\n');
    
        sb.append("1");
        sb.append(',');
        sb.append("Zack");
        sb.append('\n');
        return sb.toString(); 
    });
    

    【讨论】:

    • 后续问题...为什么当我在记事本中打开新行时似乎没有效果?当我在 Windows 写字板中打开时,我看到了预期的换行符。记事本就不用换行了吗?
    • 有两种方法可以在文件中设置换行符,这是历史问题。 ascii 表中的字符 10 和 13 都被接受为换行符,这可能因多种原因而有所不同,特别是如果您没有为要返回的文件设置字符编码。尝试使用像 res.type("text/csv; charset=UTF-8"); 这样的 UTF-8 并在正确设置为 UTF-8 的文本编辑器中打开文件。
    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多