有没有办法使用HTTP请求将超过10 MB的文件从Salesforce上传到Dropbox? [英] Is there any way to upload more than 10 MB file from Salesforce using HTTP Request to Dropbox?

查看:9
本文介绍了有没有办法使用HTTP请求将超过10 MB的文件从Salesforce上传到Dropbox?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面的代码可以完美地处理10 MB的文件,但当我尝试上载超过20 MB的文件时,它会抛出错误。

private string TOKEN = 'access_token_of_dropbox_app';
string folderPathWithFileName;
for(ContentVersion contentVersionRec : [SELECT PathOnClient, VersionData 
                                        FROM contentversion
                                        WHERE contentdocumentId IN : contentDocumentIdSet]){
    folderPathWithFileName = '/Root/'+PathOnClient;//PathOnClient contains file name with extension 
    //like imagefile.png
    system.debug('###folderPathWithFileName=>'+folderPathWithFileName);
    Http http = new Http();
    HttpRequest httpReq = new HttpRequest();
    httpReq.setEndpoint('https://content.dropboxapi.com/2/files/upload');
    httpReq.setMethod('POST');
    httpReq.setHeader('Authorization','Bearer ' + TOKEN);
    httpReq.setHeader('Content-Type','application/octet-stream');
    httpReq.setHeader('Dropbox-API-Arg','{"path":"'+folderPath+'","mode":{".tag":"add"}}');
    httpReq.setBodyAsBlob(contentVersionRec.VersionData);
    HttpResponse httpResponse = http.send(httpReq);
    System.debug('res###' + httpResponse);
    System.debug('res.getBody()###'+httpResponse.getBody());
    if (httpResponse.getStatusCode() == 200) {
        System.debug('##Congratulations File Uploaded successfully :) =>'+httpResponse.getBody());
    }else{
        //Handle code here when file not uploaded. 
    }
}

尝试上载20 MB文件时抛出错误:

System.CalloutException:超过最大大小限制12000000,请求大小为12001280

上述代码在可排队(异步)顶点中运行,且可排队顶点从触发器触发。所以我能够成功上传10MB的文件。我也知道ASYNC PEACT中的堆大小为12MB的限制。 但想知道有没有办法将文件从Salesforce上传到Dropbox超过10MB。我希望将最多100 MB的文件从APACH HTTP请求上载到Dropbox。

注意:Dropbox API还允许我们按块上传数据,这意味着我们可以使用APEX HTTP请求将数据按块发送到Dropbox。但挑战是,在首先创建块时,我们需要将BLOB数据转换为字符串或Base64以创建多个块。它在7-8 MB的情况下可以很好地工作,但当我们有超过20 MB的空间时,它在将BLOB转换为字符串或Base64时也会抛出堆大小错误。

推荐答案

好...这也是我们正在努力解决的问题。克服这些限制的答案是基于体系结构。如果您正在使用LWC或AURA组件将文件上传/下载到Dropbox API,您可以使用Java脚本而不是APEX。在这种情况下,您必须与CSP和CORS的限制和问题作斗争。

在浏览器内的客户端上执行Java脚本,浏览器受RAM使用的限制。我认为在几乎所有情况下,客户端资源都远远大于12MB的RAM。

我不知道APEX中的任何流概念,因此任何内容都必须符合堆大小限制。

一旦Salesforce启用Evergreen,您就可以使用Evergreen来克服这一限制,Evergreen不是在Salesforce平台内运行,而是在Heroku平台内运行(我猜)。此平台按需交付资源,应具有更高的限制。

https://developer.salesforce.com/blogs/2019/11/introducing-salesforce-evergreen

这篇关于有没有办法使用HTTP请求将超过10 MB的文件从Salesforce上传到Dropbox?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆