我正在尝试使用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文件的例子。
由于
答案 0 :(得分:1)
对于有效负载,您将其作为Object
传递,看起来是正确的。这将被解释为HTTP表单(您想要的)。
要修复脚本,请尝试以下操作:
确保您用于ZOHO_FILE
的值是Blob。这样可以确保HTTP表单会自动发送:
Content-Type: multipart/form-data; boundary=[automatically determined]
不要为HTTP POST指定contentType
。这允许UrlFetchApp自动使用自己的contentType
值,其中包含boundary
字段。 (次要细节:仍然可以在Blob本身上指定contentType,而不是整个帖子请求。这允许在帖子中指定每个Blob的contentType,如果您感兴趣的话。)
答案 1 :(得分:0)
如果将Blob作为有效负载值传递,UrlFetchApp将自动使用multipart / form-data编码。您可能需要使用:
"ZOHO_FILE": file.getBlob()