返回
多文件进度上传:Vue+Minio强强联手,高效又直观
前端
2023-12-06 02:33:22
前言
在现代Web开发中,多文件进度上传是一个至关重要的功能。它允许用户同时上传多个大文件,并实时查看上传进度。最近,我遇到了一个特别的需求,即在提交表单的同时上传模型资源,并且要显示上传进度。为了满足这一需求,我采用了Vue和Minio这两个强大的工具。
Minio简介
Minio是一个开源的对象存储服务,它完全兼容Amazon S3 API。它提供了一系列特性,包括:
- 无限可扩展的文件系统
- 高可用性和大规模吞吐量
- 丰富的API和工具
Vue简介
Vue是一个渐进式的JavaScript框架,它以其响应性、轻量性和灵活性而著称。它提供了一系列功能,包括:
- 数据绑定和响应式系统
- 单文件组件
- 路由和状态管理
实现过程
1. 初始化Minio客户端
import { Minio } from 'minio';
const minioClient = new Minio.Client({
endPoint: 'minio.example.com',
port: 9000,
useSSL: false,
accessKey: 'minio-access-key',
secretKey: 'minio-secret-key'
});
2. 创建桶(Bucket)
const bucketName = 'model-resources';
await minioClient.makeBucket(bucketName);
3. 监听表单提交事件
const form = document.getElementById('myForm');
form.addEventListener('submit', async (event) => {
event.preventDefault();
...
});
4. 处理上传文件
const files = event.target.querySelectorAll('input[type=file]');
for (const file of files) {
if (file.files.length > 0) {
await uploadFile(file.files[0]);
}
}
5. 上传文件并显示进度
const uploadFile = async (file) => {
const progressHandler = (progress) => {
console.log(`Uploading ${file.name}... ${progress}%`);
};
await minioClient.putObject(bucketName, file.name, file, {
progress: progressHandler
});
console.log(`File ${file.name} uploaded successfully!`);
};