Apex heap size too large的问题要怎么解决?现在有一个网页,可以上传图片文件,但是超出25MB的时候就报这个错了。
不知道你这个问题是否已经解决, 如果还没有解决的话:解决问题的一种方法是在Salesforce中使用分段上传。这样可以将大文件分成较小的块,然后逐个上传这些块。以下是详细步骤:
<apex:page>
<apex:form>
<apex:inputFile value="{!file}" />
<apex:commandButton action="{!uploadFile}" value="Upload" />
</apex:form>
</apex:page>
public class FileUploadController {
public Blob file { get; set; }
public void uploadFile() {
if(file.size() > 25000000) { // 检查文件大小是否超过25MB
// 如果文件超过25MB,将文件分成较小的块,并逐个上传
Integer blockNumber = 1;
Integer totalBlocks = (file.size() + 1048575) / 1048576; // 计算总块数
Integer offset = 0;
Integer blockSize = 1048576; // 每块大小为1MB
while(offset < file.size()) {
Blob block = file.mid(offset, blockSize); // 将文件分成块
// 使用自定义的上传方法上传块(如: 上传到Amazon S3或Salesforce文件)
uploadBlockToDestination(blockNumber, totalBlocks, block);
offset += blockSize;
blockNumber++;
}
} else {
// 如果文件大小未超过25MB,直接上传整个文件
// 使用自定义的上传方法上传整个文件
uploadWholeFile(file);
}
}
// 自定义方法:上传块到目标位置
private void uploadBlockToDestination(Integer blockNumber, Integer totalBlocks, Blob block) {
// 上传块到目标位置的逻辑(如: 上传到Amazon S3或Salesforce文件)
}
// 自定义方法:上传整个文件
private void uploadWholeFile(Blob file) {
// 上传整个文件到目标位置的逻辑(如: 上传到Amazon S3或Salesforce文件)
}
}
请注意,上述代码中使用的 uploadBlockToDestination()
和 uploadWholeFile()
方法是示例方法,需要根据实际需求进行实现。例如,可以使用Amazon S3或Salesforce文件等服务进行文件上传。
这种分段上传方法可以帮助解决Apex heap size too large错误,因为它将大文件分成较小的块,并分批进行上传。这样可以避免一次性加载整个文件内容,从而减少Apex堆大小的压力。