Vue3+EGG 实现媒体资源直传七牛云(附CDN刷新、资源预览)
2023-10-20 22:55:58
动机
对于前端开发者来说,项目中的一些图片,尤其是超高清图片,往往会大幅增加项目包体积,影响项目的构建和部署速度,尤其是小程序开发,包体积大于 2M 时,项目甚至无法构建成功。常规解决方案是将这些图片分发至 CDN,但这要求给每个项目配置 CDN 账号,易造成账号管理上的混乱。此外,日常开发中,开发者还常有以下需求:
- 快速预览已传图片 :有些图片项目上线前无法在本地预览,只能拿到图片链接后进行预览。
- CDN 刷新 :根据 CDN 刷新策略,部分图片可能需要尽快刷新至 CDN 节点以供用户及时使用。
- 图片质量控制 :有的图片在 CDN 侧需要做一些处理,如水印添加、裁剪和压缩等。
为解决以上问题,前端开发者往往会编写一些脚本来自行解决,但这些脚本往往功能单一,并且需要单独维护,难以复用到其他项目中。因此,我们编写了一个媒体资源直传七牛云的工具,支持快速预览、CDN 刷新、图片处理等功能,可在前端项目中直接使用,方便开发者随时处理媒体资源问题。
实现
工具使用开源图片云服务七牛云,提供基本的一键图片处理操作,并且能快速将资源直接分发到七牛云的 CDN 节点,然后根据 CDN 的刷新策略,这些图片可在几分钟内刷新至 CDN 节点,以供用户使用。
工具提供了如下的主要功能:
- 图片直传 :支持图片批量直传七牛云,并预览直传成功后的资源效果;
- CDN 刷新 :支持设置 CDN 刷新策略,快速刷新至 CDN 节点;
- 图片处理 :提供图片裁剪、水印添加、图片质量压缩等操作;
使用
-
安装依赖包
工具使用 Egg 作为应用框架,需要先安装其依赖包:
yarn add egg-vue3
-
创建项目
安装依赖包后,创建新的项目:
mkdir my-app && cd $_ npx egg-vue3
-
配置项目
在新建项目的
package.json
中添加七牛云的相关配置,具体如下:{ "accessKey": "your-access-key", "secretKey": "your-secret-key", "bucket": "your-bucket" }
-
开发和调试
项目创建完成后,使用
yarn start
命令,项目便开始运行,可直接在浏览器中进行开发和调试。 -
预览已传图片
在项目中使用
@vue/preview
插件,可实现对七牛云上图片进行预览,具体用法如下:<template> <div> <img :src="imageUrl" @click="previewImage" /> </div> </template> <script> import { usePreview } from '@vue/preview' export default { data () { return { imageUrl: 'https://your-image-url.com' } }, methods: { async previewImage () { // 图片预览 usePreview(this.imageUrl) } } } </script>
-
CDN 刷新
通过编辑
public/proxy.json
文件,可对 CDN 刷新进行配置,具体如下:{ cdnRefresh: { // 是否刷新所有资源 all: false, // 刷新特定资源 resources: [ 'https://your-image-url-1.com', 'https://your-image-url-2.com', 'https://your-image-url-3.com' ] } }
配置好后,可以通过
yarn proxy
命令来刷新 CDN。 -
图片处理
在项目中,可以通过
@vue/image-processor
插件对七牛云上的图片进行处理,具体如下:<template> <div> <img :src="imageUrl" @click="processImage" /> </div> </template> <script> import { useImageProcessor } from '@vue/image-processor' export default { data () { return { imageUrl: 'https://your-image-url.com' } }, methods: { async processImage () { // 处理图片 useImageProcessor(this.imageUrl, { processor: 'facedetection', // 处理器名称,目前仅支持 `facedetection` options: {} // 处理器配置 }) } } } </script>
更多用法和具体配置,请查看 项目 GitHub 代码。
结语
该工具的目的是让开发者能够专心于开发项目,而不用花时间在媒体资源的配置和处理上,以提升开发者生产力。希望这个工具能够为更多开发者提供帮助,帮助大家更好地处理项目中的媒体资源。