如何使用 REST API 下载 CSV?

How to download CSV using REST API?

这是我正在尝试将数据下载为 CSV 文件的 REST API。

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

    var data = '\n'; // workaround to separate <xml> start tag on first line
    data += 'Firstname,Lastname,Username' + '\n';
    data += 'Nikhil,vartak,niksofteng' + '\n';
    data += 'Unknown,person,anonymous' + '\n';

    response.setHeader("Content-Disposition", "attachment;filename=Xyz.csv");
    response.setContentType("text/csv");
    response.setBody({'data':data});

})(request, response);

根据 docs setBody 需要一个 JS 对象,因此如果我只是传递 data 变量,我会收到错误消息,指出数据无法解析为 ScriptableObject

因此,使用当前代码,我得到以下响应:

{
  "result": {
    "data": "\nFirstname,Lastname,Username\nNikhil,vartak,niksofteng\nUnknown,person,anonymous\n"
  }
}

生成的 CSV 如下所示:

知道如何去掉第 1 行和第 5 行的 XML 标记吗?

setBody 方法需要一个 Javascript object,然后它将根据客户端通过 Accept header.

在您的情况下,您想生成自己的序列化格式:CSV。所以不使用setBody方法,而是使用stream writer接口直接写入response stream

response.setContentType("text/csv");
response.setStatus(200);
var writer = response.getStreamWriter();

writer.write('Firstname,Lastname,Username\n');
writer.write('Nikhil,vartak,niksofteng\n');

等等

请注意,您必须自己处理 CSV 格式的所有细节,包括正确编码任何特殊字符,例如如果您希望字段包含 "Nik,hil".

这样的逗号

干杯,

赛拉斯