文件上传,是 Web 应用的一个常见的功能。
框架内置了 Multipart 插件:
- 解析浏览器上传的 的数据。
- 提供 和 两种处理接口供开发者选择。
- 默认提供了安全的限制。
获取到用户上传的数据后,开发者可以:
- 存储为本地文件。
- 提交给第三方服务,参见 通过 HttpClient 上传文件。
- 大部分情况下,我们会转存给云存储服务,在本文中我们也会一并介绍到。
虽然在 的世界里面,Stream 才是主流。
但对于一般开发者来说, 并不是很容易掌握,尤其是错误处理环节。
因此,框架提供了 模式来简化开发。
相关的示例代码参见:eggjs/example/multipart-file-mode。
前端可以通过 或 等方式来上传文件。
譬如:
框架在 模式下,会把获取到的文件挂载到 数组上。
关键代码:
- : 获取到的文件列表。
- :示例代码,此处为上传到 OSS 云存储,下文会介绍到。
- :处理完毕后,清理临时文件。
如果你对于 中的 模式非常熟悉,那么你可以选择此模式。
相关的示例代码参见:eggjs/example/multipart。
框架同样提供了简化开发的语法糖:
- :获取上传的文件流,仅支持上传一个文件的情况。
- 获取其他表单字段。
因此对应的前端代码:
对应的后端代码:
同时上传多个文件的场景,不能通过 来获取,只能通过以下方式:
模式下,在异常处理里面,必须将上传的文件流消费掉,要不然浏览器响应会卡死。
如上示例,你可以使用 stream-wormhole 和 mz-modules/pump 模块来处理。
为了避免恶意的攻击,框架默认对文件上传接口,限制了 和 的个数和大小。
默认配置如下,开发者可以根据需求修改对应的配置。
其中, 支持 这种人性化的方式,具体参见 humanize-bytes 模块。
为了保证文件上传的安全,框架限制了支持的文件格式。默认的后缀白名单参见源码。
开发者可以通过配置 来新增允许的类型:
如果你希望覆盖框架内置的白名单,可以配置 属性:
当获得上传的文件之后,我们一般会转存到云存储服务,尤其是在集群的情况下。
常用的服务有:
- OSS。
框架内置了 egg-oss 插件,默认未开启。
配置
首先需要开启插件:
然后配置一下你的 的 , , 等必要信息。
然后通过 方法即可上传,支持 和 两种模式。
模式
模式
还有一种常见的需求:前端直接上传文件到 ,不经过我们的 应用。
OSS 提供了 STS 临时授权方式。
上述的 插件的底层是 ali-oss 模块,也提供了对应的支持,具体参见文档。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/1580.html