Base64 编码的 PDF 上传一直存储为文本而不是文件

问题描述 投票:0回答:0

我正在尝试通过 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 包时,它与我上面的代码一起工作得很好。

有人对可能发生的事情有什么建议吗?

javascript netsuite multipartform-data multer suitescript
© www.soinside.com 2019 - 2024. All rights reserved.