async choseVideo(){ const that = this // uploadFile 存储需要上传的文件 let uploadFile = '' // 1.选择要上传的视频 const res = await uni.chooseVideo({ maxDuration: 60, // 拍摄视频最长拍摄时间,单位秒。最长支持 60 秒。 sourceType: ['album','camera'], // album 从相册选视频,camera 使用相机拍摄,默认为:['album', 'camera'] }); uploadFile = res[1].tempFilePath; uni.showLoading({title: "上传中"}); console.log(uploadFile,'uploadFile') const uploadTask = http.uploadFile([uploadFile]).then(picRes => { that.obj.video = picRes&&picRes.length?picRes[0]:null that.$forceUpdate() uni.hideLoading() uni.showToast({ title: "上传成功", icon: 'success' }); }) },
时间: 2024-03-04 16:49:52 浏览: 20
这段代码是一个异步方法,用于选择并上传视频。它首先定义了一个常量 `that`,用于保存当前的 `this` 上下文。然后它定义了一个变量 `uploadFile`,用于存储需要上传的视频文件。接着,它调用了 `uni.chooseVideo` 方法,弹出一个视频选择的界面,让用户选择要上传的视频。在用户选择好视频后,它将视频的临时文件路径赋值给 `uploadFile`。接下来,它调用了 `uni.showLoading` 方法,显示一个加载提示框,提示用户正在上传视频。然后,它调用了 `http.uploadFile` 方法,将 `uploadFile` 中的视频文件上传到服务器。当上传完成后,它会将上传后的结果赋值给 `that.obj.video`,这里的 `obj` 可能是当前页面的一个数据对象。然后,它调用了 `$forceUpdate` 方法,强制更新页面,以便显示上传后的视频。最后,它调用 `uni.hideLoading` 方法,隐藏加载提示框,并显示一个上传成功的提示框。
相关问题
使用prominse.ll方法,实现wx.cloud.uploadfile..多图上传,不使用async/await
好的,针对您的问题,可以使用promise链式调用实现wx.cloud.uploadFile的多图上传,可以参考下面的代码示例:
```
const uploadFiles = (filePaths) => {
const promises = filePaths.map(filePath => {
return new Promise((resolve, reject) => {
wx.cloud.uploadFile({
cloudPath: 'image/' + Date.now() + '-' + Math.floor(Math.random() * 1000),
filePath: filePath,
success: res => {
resolve(res)
},
fail: error => {
reject(error)
}
})
})
})
return Promise.all(promises)
}
// 调用示例
const fileUrls = []
uploadFiles(['file1.jpg', 'file2.jpg', 'file3.jpg'])
.then(res => {
res.forEach(item => {
fileUrls.push(item.fileID)
})
console.log('上传成功', fileUrls)
})
.catch(error => {
console.log('上传失败', error)
})
```
以上代码实现了使用promise链式调用实现了多图上传,并且没有使用async/await语法。每次上传文件都返回一个promise,通过Promise.all方法将所有的promise并行执行,等待所有promise完成后统一处理返回的结果。
使用promise.all实现wx.cloud.uploadfile多图上传,不能使用async/await
可以使用Promise.all配合map循环实现多图上传,代码示例如下:
```javascript
const files = ['image1.jpg', 'image2.jpg', 'image3.jpg'];
const uploadTasks = files.map(file => wx.cloud.uploadFile({
cloudPath: file,
filePath: localFilePath
}).then(res => res.fileID));
Promise.all(uploadTasks).then(fileIds => {
console.log('上传成功,文件ID为', fileIds);
}).catch(err => {
console.error('上传失败', err);
});
```
在这个示例中,我们将要上传的文件列表放在一个数组中,然后使用map循环生成一个上传任务列表,每个上传任务都会返回一个Promise对象。最后使用Promise.all将所有上传任务打包成一个新的Promise对象,等待所有上传任务都成功后再统一处理文件ID。
需要注意的是,Promise.all会等待所有Promise对象都resolve或reject后才会返回结果。如果有任何一个Promise对象reject了,整个Promise.all就会跳过后续的resolve操作,直接进入catch块。因此在使用Promise.all时一定要确保所有的Promise都能正常返回。