我正在尝试通过 multipart/form-data 将 PDF 文件发送到 Box.com 的 API。 PDF 数据以 Base64 编码。由于我的模块是通过 GraalVM 运行的,它的设置方式是阻止节点的内置模块,所以我必须从头开始创建表单数据有效负载。
我遇到的主要问题是 PDF 一直存储为文本,而不是被解码回二进制文件。
这是我的代码:
const testFile = file.load(321321654)
const boundary = 'ikjbhciuydgwyigdchbwikcbjlikwudhqcviudgwvcihblh'
const header = {
'Content-Type': 'multipart/form-data; boundary=' + boundary,
'Authorization': 'Bearer XXXXXXXXXXXXXXXXXXXXXXXXXX'
}
const body = []
body.push('--' + boundary)
body.push('Content-Disposition: form-data; name="attributes"');
body.push('')
body.push(JSON.stringify({name: testFile.name, parent: { id: 12216548 }}))
body.push('--' + boundary)
body.push('Content-Disposition: form-data; name="testfile"' + '; filename="' + testFile.name + '"')
body.push('content-type: application/pdf;charset=UTF-8')
body.push('Content-Transfer-Encoding: BASE64')
body.push('')
body.push(testFile.getContents())
body.push('--' + boundary + '--')
body.push('')
const result = https.post({
url: 'https://upload.box.com/api/2.0/files/content',
headers: header,
body: body.join('\r\n')
})
body.join的结果是:
--ikjbhciuydgwyigdchbwikcbjlikwudhqcviudgwvcihblh Content-Disposition:表单数据;名称=“属性”
{"name":"开始使用 Box.pdf","parent":{"id":207753393458}} --ikjbhciuydgwyigdchbwikcbjlikwudhqcviudgwvcihblh Content-Disposition:表单数据;名称=“文件”; filename="开始使用 Box.pdf" 内容类型:应用程序/pdf;字符集=UTF-8 内容传输编码:BASE64
JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDw………… --ikjbhciuydgwyigdchbwikcbjlikwudhqcviudgwvcihblh--
不幸的是,文件被加载到盒子中,但要解码回 PDF 二进制文件。它只是一个 Base64 字符串的文本文件。
我已经在我创建的本地快速服务器上进行了尝试,并且在使用 Multer 包处理多部分/表单数据上传时遇到了类似的问题。奇怪的是,当我切换到 Formidable 包时,它与我上面的代码一起工作得很好。
有人对可能发生的事情有什么建议吗?