首页 > web前端 > js教程 > 正文

正确处理 Base64 编码的 PDF 文件上传为二进制文件

心靈之曲
发布: 2025-08-23 17:04:01
原创
252人浏览过

正确处理 base64 编码的 pdf 文件上传为二进制文件

本文档旨在解决在使用 multipart/form-data 上传 Base64 编码的 PDF 文件时,文件被错误地存储为文本而非二进制文件的问题。我们将分析常见错误,并提供正确的实现方法,确保 PDF 文件能够被正确解码和存储。

在使用 multipart/form-data 上传文件时,特别是当文件内容采用 Base64 编码时,需要格外注意 HTTP 请求头的设置和数据体的构造,以确保服务器能够正确解析和存储文件。以下将详细介绍如何避免将 Base64 编码的 PDF 文件错误地存储为文本,而是作为二进制文件进行处理。

关键点:Content-Transfer-Encoding 的大小写

一个常见的错误是 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 构造示例

以下是一个完整的 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));
登录后复制

代码解释:

  1. boundary: 用于分隔 multipart/form-data 中不同部分的分隔符。务必确保这个分隔符在文件内容中不会出现。
  2. header: 包含 Content-Type 和 Authorization 头部。Content-Type 必须包含正确的 boundary 值。
  3. pdfBase64: Base64 编码的 PDF 文件内容。
  4. filename: 上传的文件名。
  5. body: 使用模板字符串构造 multipart/form-data 的数据体。
    • Content-Disposition: form-data; name="attributes": 包含文件属性的 JSON 对象。
    • Content-Disposition: form-data; name="file"; filename="${filename}": 指定文件字段的名称和文件名。
    • Content-Type: application/pdf: 指定文件的 MIME 类型。
    • Content-Transfer-Encoding: base64: 指定内容传输编码为 Base64。
  6. fetch: 使用 fetch API 发送 POST 请求。你可以使用任何你喜欢的 HTTP 客户端。

注意事项

  • Base64 编码正确性: 确保 Base64 编码的 PDF 数据是有效的。可以使用在线 Base64 解码器验证。
  • MIME 类型: Content-Type 必须设置为 application/pdf。
  • Boundary 选择: 选择一个足够复杂的 boundary,以避免与文件内容冲突。
  • 换行符: 使用 \r\n 作为行尾分隔符,这是 HTTP 协议的要求。
  • 服务器端处理: 确保服务器端能够正确解析 multipart/form-data,并支持 Base64 解码。

总结

正确处理 Base64 编码的 PDF 文件上传,关键在于:

  1. 确保 Content-Transfer-Encoding 的值为小写的 base64。
  2. 正确构造 multipart/form-data 的数据体,包括 Content-Disposition、Content-Type 和 Content-Transfer-Encoding 等头部。
  3. 使用正确的行尾分隔符 \r\n。
  4. 确保服务器端能够正确解析 multipart/form-data,并支持 Base64 解码。

通过遵循这些步骤,可以避免将 Base64 编码的 PDF 文件错误地存储为文本,而是作为二进制文件进行处理。

以上就是正确处理 Base64 编码的 PDF 文件上传为二进制文件的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号