本文档旨在解决在使用 multipart/form-data 上传 Base64 编码的 PDF 文件时,文件被错误地存储为文本而非二进制文件的问题。我们将分析常见错误,并提供正确的实现方法,确保 PDF 文件能够被正确解码和存储。
在使用 multipart/form-data 上传文件时,特别是当文件内容采用 Base64 编码时,需要格外注意 HTTP 请求头的设置和数据体的构造,以确保服务器能够正确解析和存储文件。以下将详细介绍如何避免将 Base64 编码的 PDF 文件错误地存储为文本,而是作为二进制文件进行处理。
一个常见的错误是 Content-Transfer-Encoding 的值的大小写不正确。虽然 HTTP 头部名称通常不区分大小写,但是某些服务器或解析库对编码名称的大小写敏感。
错误示例:
content-type: application/pdf;charset=UTF-8 Content-Transfer-Encoding: BASE64
正确示例:
content-type: application/pdf;charset=UTF-8 Content-Transfer-Encoding: BASE64
请务必使用小写的 base64。
以下是一个完整的 multipart/form-data 构造示例,展示了如何正确地设置请求头和数据体,以确保 Base64 编码的 PDF 文件能够被正确上传。
const boundary = '----WebKitFormBoundary7MA4YWxkTrZu0gW'; // 随机生成一个 boundary const header = { 'Content-Type': 'multipart/form-data; boundary=' + boundary, 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' // 替换为你的 Access Token }; const pdfBase64 = 'JVBERi0xLjUKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDw...'; // 替换为你的 Base64 编码的 PDF 数据 const filename = 'example.pdf'; const body = [ `--${boundary}`, 'Content-Disposition: form-data; name="attributes"', '', JSON.stringify({name: filename, parent: { id: '0' }}), // 替换为你的父目录 ID `--${boundary}`, `Content-Disposition: form-data; name="file"; filename="${filename}"`, 'Content-Type: application/pdf', 'Content-Transfer-Encoding: base64', '', pdfBase64, `--${boundary}--` ].join('\r\n'); const options = { method: 'POST', headers: header }; // 使用 fetch 或其他 HTTP 客户端发送请求 fetch('https://upload.box.com/api/2.0/files/content', { ...options, body: body }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error));
代码解释:
正确处理 Base64 编码的 PDF 文件上传,关键在于:
通过遵循这些步骤,可以避免将 Base64 编码的 PDF 文件错误地存储为文本,而是作为二进制文件进行处理。
以上就是正确处理 Base64 编码的 PDF 文件上传为二进制文件的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号