【问题标题】:Upload Google Drive file to Salesforce attachment将 Google Drive 文件上传到 Salesforce 附件
【发布时间】:2012-11-19 22:16:10
【问题描述】:

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

【问题讨论】:

    标签: salesforce google-apps-script base64


    【解决方案1】:

    下面的代码 sn-p 对我有用。我重写了一点以适合我的样本。我没有包含 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();  
    

    【讨论】:

    • 完美正是我所需要的。我不确定 blob 的起点是什么或如何定义它。 getAs 显然解决了这个问题。 Salesforce 在创建附件记录时需要所有者 ID。对我们来说这很容易,我们的 google 用户是 salesforce 用户,所以我可以通过电子邮件地址查找他们。其他人可能没有该选项。
    • 太棒了。将此标记为已接受,以便将其作为有价值的答案显示给下一个人。我能够在没有 OwnerId 的情况下让它工作(也许它假设上传的人是所有者)。不管怎样,我很高兴它对你有用。
    猜你喜欢
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多