当前位置: 首页 > news >正文

Vue3上传文件自动处理Content-Type

vue3中,以下代码: /** * 上传作业指导书文件,实现上传文件到数据库 image 字段或本地磁盘中,使用 post 发送请求,发送的数据只有:请求体数据(表单数据 formData) * @param formData 表单数据,包含的数据有:文件数据(uploadFile)和 文件编号(fileNo) {@link FormData} * @returns */ export const workInstructionUploadFileService = (formData: FormData) => { return request.post("/resources/workInstruction/uploadFile", formData, { // 上传文件,需设置 headers 信息,将"Content-Type"设置为"multipart/form-data" headers: { "Content-Type": "multipart/form-data" } }); }; 需不需要设置"Content-Type": "multipart/form-data"?

不需要手动设置"Content-Type": "multipart/form-data"

原因如下:

1. 浏览器会自动设置

当使用FormData对象发送请求时,浏览器会自动设置正确的Content-Type,并包含必要的 boundary(边界分隔符)。手动设置可能会破坏这个机制。

2. 会丢失 boundary 信息

如果你手动设置了"Content-Type": "multipart/form-data",但没有包含 boundary,请求会失败。正确的格式应该是:

text

Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

3. 推荐的正确写法

typescript

export const workInstructionUploadFileService = (formData: FormData) => { return request.post("/resources/workInstruction/uploadFile", formData); // 不需要手动设置 headers,axios 会自动处理 };

4. 验证方式

你可以在浏览器开发者工具的 Network 标签页查看实际的请求头,会发现:

  • 手动设置时:Content-Type: multipart/form-data

  • 自动设置时:Content-Type: multipart/form-data; boundary=...

5. 特殊情况

只有在以下情况下需要手动设置:

  • 使用的请求库不支持自动设置

  • 需要自定义 boundary(极少情况)

  • 需要在 header 中添加其他特定信息

对于你使用的axios或类似的现代 HTTP 库,它们都会自动正确处理FormData的 Content-Type。

建议修改:

typescript

/** * 上传作业指导书文件 * @param formData 包含 uploadFile 和 fileNo 的表单数据 * @returns */ export const workInstructionUploadFileService = (formData: FormData) => { return request.post("/resources/workInstruction/uploadFile", formData); // axios 会自动设置正确的 Content-Type 和 boundary };

这样代码更简洁,也更符合最佳实践。

http://www.jsqmd.com/news/74461/

相关文章:

  • 终极解决方案:微信网页版快速上手指南
  • Wan2.2-T2V-A14B模型训练数据来源与版权问题探讨
  • 320亿参数新纪元:IBM Granite-4.0-H-Small引领企业AI效率革命
  • 深蓝词库转换完整指南:从零基础到高效应用
  • 回忆杀,极空间上部署『开源奇迹』游戏服务器,一键开服自己当GM
  • Wan2.2-T2V-A14B生成视频的元数据可追溯性设计
  • Wan2.2-T2V-A14B如何处理复杂场景下的光照和阴影变化?
  • Wan2.2-T2V-A14B能否生成健身房器械使用教学动画?大众健身普及
  • Wan2.2-T2V-A14B支持多摄像头视角切换的实现机制
  • 揭秘边缘Agent性能瓶颈:如何用Docker实现高效轻量部署
  • 基于Java Swing的拼图小游戏(2)
  • 人工智能:重塑未来的核心驱动力
  • 机器学习进阶<8>PCA主成分分析
  • Blender 3DM导入终极指南:快速实现Rhino到Blender的无缝转换
  • DevUI面向企业中后台产品的开源前端解决方案,玩转图表类组件
  • Redis三种服务架构详解
  • Wan2.2-T2V-A14B模型对AR/VR内容开发的支撑能力
  • 12.11postman,数据库表设计,idea中基本操作和debug
  • Blender 3MF插件完整使用手册
  • Wan2.2-T2V-A14B在社交媒体内容创作中的爆发点
  • 突破性技术!23B宽MoE代码续写模型训练成本直降97%,多领域评测刷新SOTA纪录
  • 双十二电商人!怎么远程管理店铺?
  • Windows右键菜单大扫除:ContextMenuManager极简使用手册
  • Alibaba linux 3安装LAMP(6)
  • DownKyi:重新定义B站视频下载体验的完整解决方案
  • 43、深入探索vi编辑器:问题解决、网络资源与特色功能
  • 零基础掌握镜像烧录:Balena Etcher新手快速上手指南
  • kanass全面介绍(7) - 需求管理详解
  • Wan2.2-T2V-A14B模型在低带宽环境下的压缩传输方案
  • C++学习之旅【C++类和对象(中)】