1

我正在尝试使用 UlrFetch 将 CSV 数据提交到 Zoho 报告。我正在使用以下代码:

function doImport(tabla,file) {
  var url="https://reportsapi.zoho.com/api/xxxxxxxx/yyyyyyyyyyy/"+tabla;
  var ticket="zzzzzzzzzzzzzzzz" ;//getTicket();
  url=url + "?ZOHO_ACTION=IMPORT&ZOHO_OUTPUT_FORMAT=XML&ZOHO_ERROR_FORMAT=json&ZOHO_API_VERSION=1.0"
  var params={"ZOHO_API_KEY":"vvvvvvvvvvvvvvvvvvvvvv"
              ,"ticket":ticket
              ,"ZOHO_FILE":file
              ,"ZOHO_IMPORT_TYPE":"APPEND"
              ,"ZOHO_ON_IMPORT_ERROR":"ABORT"
              ,"ZOHO_AUTO_IDENTIFY":"true"
              ,"ZOHO_CREATE_TABLE":"false"
              ,"ZOHO_DATE_FORMAT":"dd-MM-YYYY"
              ,"ZOHO_DELIMITER":"0"
             };

  var options =
    {
      "method" : "post",
      "payload" : params,
      "contentType": "multipart/form-data"
    };
  var response=UrlFetchApp.fetch(url, options);
  var tableDataString=response.getContentText();
  expireTicket(ticket);
  Logger.log(tableDataString);
  return tableDataString;
}

但是,数据未以正确的多格式格式提交(出现错误 500 状态)。这个问题可以追溯到 2011 年初。欢迎提供一两个如何以多部分/表单数据格式提交 blob 文件的示例。

谢谢

4

2 回答 2

2

对于有效负载,您将其作为 传递Object,这看起来是正确的。这将被解释为 HTTP 表单(您想要的)。

要修复您的脚本,请尝试以下操作:

  1. 确保您使用的值ZOHO_FILE是 Blob。这确保 HTTP 表单将自动发送:
    Content-Type: multipart/form-data; boundary=[automatically determined]

  2. 不要contentType为 HTTP POST 指定。这允许 UrlFetchApp 自动使用它自己的contentType值,其中包括该boundary字段。(次要细节:仍然可以在 Blob 本身上指定 contentType,而不是整个帖子请求。这允许指定帖子中每个 Blob 的 contentType,如果您感兴趣的话。)

于 2012-06-11T17:03:30.810 回答
1

如果您将 Blob 作为有效负载值传递,UrlFetchApp 将自动使用 multipart/form-data 编码。您可能需要使用:

"ZOHO_FILE": file.getBlob()
于 2012-05-24T18:53:32.297 回答