Spring Boot下Camel-Salesforce组件调用REST下载大文件选型咨询
Spring Boot中用camel-salesforce下载Salesforce大文件的正确方案
问题梳理
你需要通过camel-salesforce组件调用Salesforce Content API下载50MB左右的文件,当前使用apexCall的配置存在参数误用,需明确适配大文件的组件选项。
优化现有apexCall配置
你当前的配置方向没问题,但sObjectClass参数完全多余——CreateSObjectResult是用于创建对象的返回DTO,和下载二进制文件场景不匹配。修改后的正确配置:
salesforce:apexCall?apexMethod=GET&apexUrl=/services/data/v49.0/connect/files/545435435/content&rawPayload=true
rawPayload=true是核心:让组件直接返回原始二进制响应,跳过不必要的DTO序列化,避免内存溢出,完美适配大文件传输。- 删除
sObjectClass参数,因为下载文件不需要映射到任何Salesforce对象DTO。
更贴合场景的内置操作:getContentVersion
如果你的文件对应Salesforce的ContentVersion对象,直接使用camel-salesforce内置的getContentVersion操作更规范,它已经内置了大文件流式处理逻辑:
from("direct:startFileDownload") .to("salesforce:getContentVersion?ids=你的ContentVersionID&rawPayload=true") .to("file:/本地存储路径");
大文件传输必备配置
为避免超时和内存问题,需配置Camel的HTTP客户端参数:
@Bean public HttpClientConfigurer customHttpClientConfigurer() { return builder -> { // 设置连接存活时间,适配大文件下载时长 builder.setConnectionTimeToLive(30, TimeUnit.MINUTES); // 设置Socket超时,防止下载中途断开 builder.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(300000).build()); }; }
内容的提问来源于stack exchange,提问作者Vik
相关产品推荐
相关产品推荐

