前端上传文件流给后端需要注意什么

前端 潘老师 3个月前 (01-24) 48 ℃ (0) 扫码查看

你知道前端上传文件流给后端需要注意什么吗?今天我们就一起来聊一下。

业务背景

在常规的业务流程中,通常会将文件上传至公共服务器,随后获取文件地址并将其传递给对应的业务模块。然而,在一些敏感业务场景中,出于安全性和资源优化的考虑,文件需要存储在业务域下。

一方面,这可以增强数据的安全性;另一方面,也能避免因文件存储在公共服务器上而造成的云资源空间浪费。此外,在某些业务场景中,为了避免不必要的交互成本,例如用户点击上传文件,但最终业务并未真正使用该文件,且用户下次进入时也无需再展示该文件,此时可以利用本地文件进行临时展示。以腾讯为例,它提供了一些云地址用于文件的临时展示,当业务真正需要时,再从腾讯云端下载该文件。

文件流上传的注意事项

1. 请求参数的构建

过去的技术方案中,文件上传通常需要通过表单(form)提交来实现。如今,这种做法已不再适用,取而代之的是使用 FormData 对象。例如,可以通过以下代码构建请求参数:

let data = new FormData(); 
data.append("file", file);

这种方式更加简洁高效,能够更好地满足现代文件上传的需求。

2. 请求头的设置

在设置请求头时,有两种常见的方法。一种是在每个请求方法中单独添加请求头,另一种是在传参时通过增加统一的方法规则来实现。例如,可以在传参时添加一个类似 file 的标识,然后在请求的中间件中根据该标识自动添加请求头。以下是设置请求头的示例代码:

headers: { 
    "Content-Type": "multipart/form-data",
 },

合理设置请求头对于确保文件能够正确上传至后端至关重要。

3. 获取原始文件对象

在大多数现代开发场景中,通常不需要手动编写上传控件,因为像 Ant Design(antd)和 Element UI(ele)等前端框架会为我们封装好文件对象。然而,为了确保后端能够顺利接收文件,我们需要与后端开发人员达成一致,明确他们期望接收的文件格式。
一种常见的做法是将文件对象转换为 Blob 对象,然后将其传递给后端。另一种做法是直接传递 File 对象,但需要注意的是,不同组件封装后的文件对象可能有所不同。例如,在 Ant Design 中,原始文件对象是 file.originFileObj,而在 Element UI 中,原始文件对象是 file.raw。以下是文件对象的属性示例:

通常情况下,后端需要根据这些标准对象获取文件名、大小和类型等信息。在文件名中,通常需要包含扩展名以便进行相关判断,否则可能会导致错误。

4. 请求方式的转变

由于整个文件上传请求已经转变为一个常规的 API 请求,而非传统的表单提交,因此可以通过常规的 response.code 来判断请求的成功与否,而无需为文件流的上传设置特殊的错误捕获机制。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/front/13171.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】