1

除了实际文件不可读外,我一切正常。我假设它会加载,因为我没有收到任何错误并且附件已创建。“文件”在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() 接缝,该文件将是一个问题。尽管如此,仍然需要一些帮助来完成这项工作。

4

1 回答 1

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();  
于 2012-11-19T23:23:10.190 回答