uniapp如何实现一次性上传多个视频
在uniapp中,我想实现一次性上传多个视频文件,但不知道具体该怎么做。请问应该如何选择文件并批量上传?是否需要使用特定的组件或插件?上传过程中如何显示进度?有没有完整的代码示例可以参考?
2 回复
使用uni.uploadFile,在循环中调用上传接口,每次传一个视频。注意:H5端可多选,但小程序需逐个上传。
在 UniApp 中,可以通过以下步骤实现一次性上传多个视频:
1. 选择多个视频文件
使用 uni.chooseMedia API 选择多个视频,通过设置 count 参数控制最大可选数量。
uni.chooseMedia({
count: 5, // 最多选择5个视频
mediaType: ['video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: (res) => {
const tempFiles = res.tempFiles; // 获取选中的视频临时文件数组
this.uploadVideos(tempFiles);
}
});
2. 逐个上传视频
遍历选中的视频文件,使用 uni.uploadFile 逐个上传到服务器。
uploadVideos(files) {
const uploadTasks = files.map(file => {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: 'https://your-server.com/upload', // 替换为你的上传接口
filePath: file.tempFilePath,
name: 'video', // 文件对应的参数名
formData: {
'user': 'test'
},
success: (uploadRes) => {
console.log('上传成功', uploadRes);
resolve(uploadRes);
},
fail: (err) => {
console.error('上传失败', err);
reject(err);
}
});
});
});
// 等待所有上传任务完成
Promise.all(uploadTasks)
.then(results => {
uni.showToast({ title: '所有视频上传成功', icon: 'success' });
})
.catch(error => {
uni.showToast({ title: '部分视频上传失败', icon: 'none' });
});
}
注意事项:
- 临时路径有效期:
tempFilePath在应用关闭后可能失效,建议尽快上传。 - 服务器限制:确保服务器支持多文件上传及大小限制。
- 用户体验:可添加进度条显示上传状态(需自行实现进度监听)。
完整示例代码:
<template>
<view>
<button @click="chooseVideos">选择并上传多个视频</button>
</view>
</template>
<script>
export default {
methods: {
chooseVideos() {
uni.chooseMedia({
count: 5,
mediaType: ['video'],
success: (res) => {
this.uploadVideos(res.tempFiles);
}
});
},
uploadVideos(files) {
const uploadTasks = files.map(file => {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: 'https://your-server.com/upload',
filePath: file.tempFilePath,
name: 'video',
success: resolve,
fail: reject
});
});
});
Promise.all(uploadTasks)
.then(() => uni.showToast({ title: '上传成功' }))
.catch(() => uni.showToast({ title: '上传失败', icon: 'none' }));
}
}
}
</script>
通过以上方法,即可在 UniApp 中实现一次性选择并上传多个视频文件。

