You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SuiteScript中使用AWS SDK上传PDF至S3后无法加载文档问题

解决SuiteScript上传PDF到AWS S3后无法打开的问题

问题根源

PDF属于二进制文件,当前代码中直接调用selectedFile.getContents()获取内容,该方法返回的是UTF-8编码的字符串,会破坏二进制文件的原始字节结构,导致上传至S3后的文件损坏,无法正常打开。

解决方案

需要对二进制文件内容进行Base64编码后再上传,同时告知S3内容的编码格式,确保存储的文件保持原始结构。具体修改如下:

1. 修正文件内容获取逻辑

将文件的二进制内容转换为Base64编码,避免字符串编码导致的损坏:

// 替换原selectedFileContent的获取代码
var selectedFileContent = nEncode.convert({
    string: selectedFile.getContents(),
    inputEncoding: nEncode.Encoding.BASE_64,
    outputEncoding: nEncode.Encoding.BASE_64
});

2. 调整S3上传参数

在putObject的参数中添加ContentEncoding: 'base64',让S3自动解码Base64内容并存储原始二进制:

const params ={
    Bucket: awsBucketName,
    Key: keyFileName,
    Body: selectedFileContent,
    ContentEncoding: 'base64', // 新增此参数,告知S3内容编码格式
    ServerSideEncryption: 'AES256',
    ACL: "public-read-write",
    ContentType: getContentTypeByFileExtension(fileExtension),
};

3. 修正取回文件后的处理逻辑

从S3取回的内容是Base64编码的,需要解码后再创建NetSuite文件:

if (response.code === 200) {
    // 解码Base64内容
    var decodedContent = nEncode.convert({
        string: response.body,
        inputEncoding: nEncode.Encoding.BASE_64,
        outputEncoding: nEncode.Encoding.UTF_8
    });
    var file = nfile.create({
        name: "file_name.pdf",
        fileType: nfile.Type.PDF,
        contents: decodedContent,
        folder: -20
    });
    var fileId = file.save();
    nLog.debug("file save with id" + fileId)
}

Upload()函数400错误说明

你使用的简化版AWS S3客户端中,Upload()方法可能需要直接接收二进制流而非字符串。如果要使用Upload(),需将文件内容转换为二进制数组后传递,但优先确保putObject的方案正常工作,这是更稳妥的二进制文件上传方式。

内容的提问来源于stack exchange,提问作者Ahmad Alissa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:44:57