uni-app H5端视频上传BUG
uni-app H5端视频上传BUG
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 | HBuilderX |
产品分类:
uniapp/H5
浏览器平台:
Chrome
浏览器版本:
120.0.6099.71
示例代码:
openVideoChoose() {
let that = this;
uni.chooseFile({
count: 1,
success: (res) => {
if(res.size > 50*1024*1024) {
toast("视频大小不能超过50M")
return;
}
console.log(JSON.stringify(res))
//#ifdef MP-WEIXIN
that.videoFormData.tempFilePath = res.tempFilePath;
//#endif
//#ifdef H5
that.videoFormData.tempFilePath = res.tempFilePaths[0];
//#endif
}
})
},
uploadVideo() {
let that = this;
if (that.videoFormData.title==null || !that.videoFormData.title.trim()) {
toast('请输入视频标题!');
return false;
}
if (!that.videoFormData.tempFilePath) {
toast('请选择视频!');
return false;
}
uni.showLoading({title: "上传中,请稍等"})
uni.uploadFile({
filePath: that.videoFormData.tempFilePath,
url: config.baseUrl + '/uploadCategoryVideo',
name: 'file',
formData: {
type: that.activeBtn,
title: that.videoFormData.title
},
header: {
"Content-Type": "multipart/form-data",
'X-Authorization': getToken()
},
success: function (res1) {
uni.hideLoading();
var reJet = JSON.parse(res1.data);
if (reJet.code == 0) {
that.videoPopupClose();
that.init();
toast('添加成功!')
} else {
that.videoPopupClose();
toast('添加失败!' + reJet.message)
}
},
fail: function (err) {
uni.hideLoading();
toast('添加失败!')
}
});
},
操作步骤:
选择视频后,点击上传视频
预期结果:
上传成功
实际结果:
后台报错,没有文件
bug描述:
uniapp开发H5端应用上传视频,使用uni.chooseFile或者uni.chooseVideo,后通过uni.uploadFile上传视频到后台,后台报错the request was rejected because no multipart boundary was found(没有文件),小程序端是正常的
更多关于uni-app H5端视频上传BUG的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可以试试把 “Content-Type”: “multipart/form-data” 去掉行不行,参考文档
更多关于uni-app H5端视频上传BUG的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在使用 uni-app 开发 H5 端应用时,视频上传可能会遇到一些常见问题或 BUG。以下是一些可能的原因和解决方案:
1. 视频文件过大导致上传失败
- 问题描述:H5 端上传视频时,如果文件过大,可能会导致上传失败或卡顿。
- 解决方案:
- 限制上传文件大小,提示用户选择合适大小的视频。
- 使用分片上传(chunked upload)技术,将大文件分割成多个小文件上传。
- 压缩视频文件后再上传(可以使用第三方库或工具)。
2. H5 端无法获取视频文件信息
-
问题描述:在 H5 端,
uni.chooseVideo或uni.chooseFile获取的视频文件可能缺少某些信息(如文件大小、时长等)。 -
解决方案:
- 使用
FileReader或URL.createObjectURL获取文件信息。 - 如果需要获取视频时长,可以使用
<video>标签加载视频后,通过duration属性获取。
const video = document.createElement('video'); video.src = URL.createObjectURL(file); video.onloadedmetadata = () => { console.log('视频时长:', video.duration); }; - 使用
3. H5 端上传接口不支持 FormData
-
问题描述:某些 H5 端的上传接口可能不支持
FormData,导致上传失败。 -
解决方案:
- 确保后端接口支持
multipart/form-data格式。 - 如果后端不支持,可以将文件转换为
base64或Blob格式上传。
const file = e.target.files[0]; const reader = new FileReader(); reader.onload = () => { const base64 = reader.result.split(',')[1]; // 上传 base64 数据 }; reader.readAsDataURL(file); - 确保后端接口支持
4. H5 端上传进度无法监听
-
问题描述:在 H5 端,
uni.uploadFile的progress回调可能无法正常触发。 -
解决方案:
- 使用原生
XMLHttpRequest或fetch实现上传,并监听progress事件。
const xhr = new XMLHttpRequest(); xhr.upload.onprogress = (e) => { if (e.lengthComputable) { const percent = (e.loaded / e.total) * 100; console.log('上传进度:', percent); } }; xhr.open('POST', '上传地址', true); xhr.send(formData); - 使用原生
5. H5 端跨域问题
-
问题描述:H5 端上传视频时,可能会遇到跨域问题(CORS)。
-
解决方案:
- 确保后端服务器配置了正确的 CORS 头信息。
- 如果是开发环境,可以使用代理解决跨域问题。
// vue.config.js module.exports = { devServer: { proxy: { '/api': { target: 'http://your-server.com', changeOrigin: true, }, }, }, };
6. H5 端视频格式不支持
- 问题描述:某些浏览器或设备可能不支持特定的视频格式(如
.mov、.avi)。 - 解决方案:
- 限制用户上传的视频格式(如
.mp4、.webm)。 - 使用第三方库(如
ffmpeg.js)在客户端转换视频格式。
- 限制用户上传的视频格式(如
7. H5 端上传后无法播放
- 问题描述:上传后的视频无法播放,可能是由于文件损坏或编码问题。
- 解决方案:
- 确保上传的视频文件完整且未损坏。
- 使用
<video>标签测试上传后的视频是否可以正常播放。
8. H5 端上传超时
-
问题描述:上传视频时,可能会因为网络问题导致超时。
-
解决方案:
- 增加上传超时时间。
- 使用分片上传或断点续传技术。
uni.uploadFile({ url: '上传地址', filePath: filePath, timeout: 60000, // 设置超时时间为 60 秒 success: (res) => { console.log('上传成功', res); }, fail: (err) => { console.log('上传失败', err); }, });

