2012-11-19 241 views
0

我有一切工作,但實際文件不可讀。我假設它加載,因爲我沒有得到任何錯誤,並創建附件。 「文件」需要在salesforce中爲base64,所以我假設我的問題是Drive中的blob不是base64。問題是,如何將文件blob轉換爲上傳的base64格式,並且這實際上可行。將Google雲端硬盤文件上傳到Salesforce附件

相關的代碼塊

var payload = Utilities.jsonStringify(
     {"Name" : name, //string 
     "ParentId" : acctId, //string 
     "OwnerId" : ownerId, //string 
     "body" : content //base64 
     } 
    ); 

    var contentType = "application/json; charset=utf-8"; 
    var feedUrl = instanceUrl + "/services/data/v23.0/sobjects/Attachment/" 
    var response = UrlFetchApp.fetch(feedUrl, { method : "POST", headers : { "Authorization" : "OAuth " + accessToken }, payload : payload, contentType: contentType }); 

    var feed = JSON.parse(response.getContentText()); 

在這裏看着它接縫Utilities.jsonStringify()的文件將是一個問題。儘管如此,仍然需要一些幫助。

回答

2

下面的代碼片段適用於我。我重新寫了一下,以適應我的樣本。我沒有包括一個ownerid,因爲我不知道那裏包含了什麼。我認爲關鍵問題可能是您沒有使用getAs()。如果你有純Google Doc Blob,那麼你的瀏覽器將不知道如何轉換。請注意,我如何使用application/pdf。我相信你也可以爲MS Word使用類似的MIME類型。另請注意,我使用Utilities API轉換爲Base64。

var myFileId = 'MY_FILE_ID'; 
var myParendId = 'ACCOUNT_ID'; 
var myToken = 'USER_TOKEN'; 

var baseContent = DocsList.getFileById(myFileId).getAs('application/pdf').getBytes(); 
var base64Content = Utilities.base64Encode(baseContent); 

var payload = Utilities.jsonStringify(
    {"Name" : 'ArunTest.pdf', //string 
    "ParentId" : myParendId, //string 
    "body" : base64Content //base64 
    } 
); 

var options = { 
     "method": "post", 
     "contentType" : "application/json", 
     "payload" : payload, 
     "headers" : { 
        "Authorization" : "Bearer " + myToken 
        } 
} 

var getDataURL = UserProperties.getProperty(baseURLPropertyName) + '/services/data/v26.0/sobjects/Attachment/'; 
var dataResponse = UrlFetchApp.fetch(getDataURL,options).getContentText(); 
+0

完美正是我需要的。我不確定這個blob的起點是什麼,或者如何定義它。 getAs顯然可以解決這個問題。 Salesforce在創建附件記錄時需要擁有者ID。對我們來說,很容易,我們的谷歌用戶是銷售人員用戶,所以我可以通過電子郵件地址查找他們。其他人可能沒有這個選擇。 –

+0

太好了。將其標記爲已接受,以便這將顯示爲對下一個人有價值的答案。我能夠在沒有OwnerId的情況下運行它(也許它假定上傳的人是所有者)。無論哪種方式,我很高興它爲你解決。 –

相關問題