2012-05-22 65 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文件的例子。

由於

+0

網址抓取現在可以接受一個byte []作爲參數Object的有效負載值。 Blob.getBytes()對此足夠有效。 就我所瞭解的多部分請求而言,這不是二元的。所以我不認爲你可以按照你的建議混合兩者(在任何平臺上)。您試圖與之進行交互的API的網址是什麼? – mzimmerman

+0

謝謝你的回答。我使用的是http://zohoreportsapi.wiki.zoho.com/Importing-CSV-File.html中描述的API,它可以在其他平臺上使用。你有一個多部分表單數據提交的例子嗎? – lanzalibre

回答

0

如果傳遞的Blob作爲有效載荷值UrlFetchApp將自動使用的multipart/form-data編碼。您可能需要使用:

"ZOHO_FILE": file.getBlob() 
1

對於有效載荷,您將其作爲Object傳遞給它,看起來正確。這將被解釋爲一個HTTP表單(你想要的)。

要解決你的腳本,請嘗試以下操作:

  1. 確保您使用的是ZOHO_FILE值的Blob。這將確保HTTP表單將自動發送:
    Content-Type: multipart/form-data; boundary=[automatically determined]

  2. 請勿爲HTTP POST指定contentType。這允許UrlFetchApp自動使用它自己的contentType值,其中包括boundary字段。 (小細節:。這是確定仍指定的contentType上的斑點本身,只是沒有整體POST請求這允許指定的帖子中的每個斑點的contentType中,如果您感興趣)