javascript Base64编码的PDF上传保持存储为文本而不是文件

yftpprvb  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(244)

我正在尝试通过multipart/form-data向www.example.com的API发送一个PDF文件Box.com。PDF数据是用Base64编码的。由于我的模块是通过GraalVM运行的,而GraalVM的设置方式是阻止node的内置模块,因此我必须从头开始创建表单数据有效负载。
主要的问题,我有是,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: form-data; name="attributes"

{\"name\":\"Get Started with Box.pdf\",\"parent\":{\"id\":207753393458}}
--ikjbhciuydgwyigdchbwikcbjlikwudhqcviudgwvcihblh
Content-Disposition: form-data; name="file"; filename="Get Started with Box.pdf"
content-type: application/pdf;charset=UTF-8
Content-Transfer-Encoding: BASE64

JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDw (actual payload string shortened)
--ikjbhciuydgwyigdchbwikcbjlikwudhqcviudgwvcihblh--

不幸的是,该文件被加载到框中,但要解码回PDF二进制文件。它只是一个Base64字符串的文本文件。
我在自己创建的本地express服务器上尝试过,在使用Multer包处理multipart/form-data上传时也遇到了类似的问题。奇怪的是,当我切换到Formidable包时,它与我上面的代码一起工作得很好。
我已经看过了表单数据规范,我正在构建的有效负载对我来说是正确的。在box.com论坛上也有其他人问我类似的问题,但没有人提供答案。谷歌搜索和堆栈溢出搜索都没有出现类似的问题。
有没有人对可能发生的事情有任何建议?

3df52oht

3df52oht1#

看起来你可能已经从这里的代码开始了
请注意,content-transfer-encoding是base64而不是BASE64。头名应该是大小写不敏感的,但我在过去遇到过编码名称大小写敏感的问题。这也可以解释为什么你的代码在一个目标上工作而不是另一个。

相关问题