Urlfetch blobs multipart / m

时间:2012-05-22 14:32:42

标签: http-headers google-apps-script

我正在尝试使用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状态)。此问题回溯到early 2011。请一两个如何以multipart / form-data格式提交blob文件的例子。

由于

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

"ZOHO_FILE": file.getBlob()