2012-05-22 2 views
1

Я пытаюсь использовать UlrFetch для отправки CSV-данных в отчеты Zoho. Я использую следующий код:Urlfetch blobs multipart/m

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. Пожалуйста, один или два примера того, как отправлять файлы blob в формате multipart/form-data, приветствуются.

Благодаря

+0

UrlFetch теперь может принять байтом [] в качестве значения полезной нагрузки для аргумента Object. Blob.getBytes() работает достаточно для этого. С точки зрения множественного запроса, как я понимаю, это не двоично. Поэтому я не думаю, что вы можете смешивать два (на любой платформе), как вы предлагаете. Каков URL-адрес API, с которым вы пытаетесь взаимодействовать и каким образом? – mzimmerman

+0

Благодарим вас за ответ. Я использую API, описанный в http://zohoreportsapi.wiki.zoho.com/Importing-CSV-File.html, и он работает с других платформ. Есть ли у вас пример представления данных с несколькими формами? – lanzalibre

ответ

0

UrlFetchApp будет использовать кодирование многочастному/форма-данные автоматически, если вы передаете Blob в качестве значения полезной нагрузки. Вы, возможно, потребуется использовать:

"ZOHO_FILE": file.getBlob() 
1

Для полезной нагрузки, вы передаете его как Object, который выглядит правильно. Это будет интерпретироваться как HTTP-форма (которую вы хотите).

Чтобы исправить сценарий, попробуйте следующее:

  1. Убедитесь, что значение вы используете для ZOHO_FILE является Blob. Это гарантирует, что форма HTTP будет автоматически отправлена ​​с:
    Content-Type: multipart/form-data; boundary=[automatically determined]

  2. Не указывать contentType для HTTP POST. Это позволяет UrlFetchApp автоматически использовать собственное значение contentType, которое включает в себя поле boundary. (Малая деталь:.. Это нормально еще указать CONTENTTYPE на самом Blob, просто не общий запрос на пост Это позволяет указать CONTENTTYPE каждого Blob в должности, если это вас интересует)