2012-11-19 207 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的情况下运行它(也许它假定上传的人是所有者)。无论哪种方式,我很高兴它为你解决。 –

相关问题