将Google云端硬盘文件上传到Salesforce附件

时间:2012-11-19 22:16:10

标签: salesforce google-apps-script base64

除了实际文件不可读之外我一切正常。我认为它加载,因为我没有得到任何错误,并创建附件。 “文件”需要在salesforce中为base64,所以我假设我的问题是Drive中的blob不是base64。问题是,如何将文件blob转换为base64格式进行上传,这实际上是否有效。

相关代码块

    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()文件将是一个问题。尽管如此,仍需要一些帮助。

1 个答案:

答案 0 :(得分:2)

下面的代码段对我有用。我重新写了一下以适应我的样本。我没有包括一个所有者,因为我不知道该包含什么。我认为关键问题可能是您没有使用getAs()。如果你有纯Google Docb 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();