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

如何用Suite Script将NetSuite中的PDF等二进制文件上传至DropBox?

解决SuiteScript上传NetSuite二进制文件到DropBox的问题

问题背景

使用SuiteScript上传NetSuite文件到DropBox时,文本、CSV文件可正常上传,但PDF、DOC、ZIP等二进制文件上传后无法正常打开(转BASE64再转UTF8上传会出现空白文件)。原代码通过getContents()获取文件内容作为请求体,无法适配二进制文件传输需求。

核心原因

NetSuite的file.getContents()方法对二进制文件会返回BASE64编码后的字符串,而DropBox上传接口要求接收原始二进制数据。直接将BASE64字符串作为请求体发送,DropBox会将其当作普通文本解析,导致文件损坏。

解决方案

放弃getContents()获取二进制文件内容,改用file.convertToByteArray()将文件转换为字节数组,直接以字节数组作为POST请求的body发送。同时优化请求头和参数处理逻辑:

// 加载NetSuite文件对象
let loadFileObj = file.load({
    id: 'file Cabinet File Id'
});

// 构建DropBox请求头
let apiHeaders = {
    "Authorization": `Bearer ${API_TOKEN}`,
    'Content-Type': 'application/octet-stream',
    "Dropbox-API-Arg": JSON.stringify({
        "path": `/Item Fulfillment/${loadFileObj.name}`,
        "mode": "add",
        "autorename": false,
        "mute": false
    })
};

// 区分文本/二进制文件处理逻辑
let fileBody;
if (loadFileObj.isText) {
    // 文本文件仍使用getContents()获取内容
    fileBody = loadFileObj.getContents();
} else {
    // 二进制文件转换为原始字节数组
    fileBody = loadFileObj.convertToByteArray();
}

// 发送上传请求
let responseData = https.post({
    body: fileBody,
    url: API_URL,
    headers: apiHeaders
});

关键说明

  1. convertToByteArray()会直接返回文件的原始二进制字节数组,完全匹配DropBox接口对请求体的要求
  2. 使用JSON.stringify()处理DropBox-API-Arg参数,避免手动拼接JSON时的语法错误
  3. 通过isText属性区分文件类型,保证文本和二进制文件都能正确上传
  4. 移除Content-Transfer-Encoding请求头,该头对二进制直接传输无意义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:55:16