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 年初頭にさかのぼります。multipart/form-data 形式で blob ファイルを送信する方法の例を 1 つか 2 つ教えてください。

ありがとう

4

2 に答える 2

2

Objectペイロードの場合、正しいように見えるとして渡します。これは、(必要な) HTTP フォームとして解釈されます。

スクリプトを修正するには、次のことを試してください。

  1. 使用している値がZOHO_FILEBlob であることを確認してください。これにより、HTTP フォームが次のように自動的に送信されます。
    Content-Type: multipart/form-data; boundary=[automatically determined]

  2. contentTypeHTTP 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 に答える