v.pics.forEach((u, i) => { if (u.split('/')[0] == 'cloud:') {} else { picCursor.push(i) tmpPromise.push(wx.cloud.uploadFile({ cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'), filePath: u })) } })怎么在这段代码中增加一个图片压缩功能,压缩图片后在进行上传
时间: 2024-02-13 22:07:54 浏览: 99
你可以使用第三方的图片压缩库来实现图片压缩功能,例如使用`wx.compressImage()`方法。在原有代码的基础上,可以将`wx.cloud.uploadFile()`方法的`filePath`参数替换为压缩后的图片地址,示例代码如下:
```
const tmpFilePromises = []
v.pics.forEach((u, i) => {
if (u.split('/')[0] == 'cloud:') {
// 图片已在云存储空间中,无需再次上传
} else {
picCursor.push(i)
// 压缩图片并上传
tmpFilePromises.push(wx.compressImage({
src: u,
quality: 80, // 压缩质量
}).then(res => {
return wx.cloud.uploadFile({
cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'),
filePath: res.tempFilePath, // 压缩后的图片地址
})
}))
}
})
// 等待所有压缩上传完成
Promise.all(tmpFilePromises).then(res => {
console.log('all uploaded', res)
}).catch(error => {
console.error('upload error', error)
})
```
在上述代码中,我们将`wx.compressImage()`方法应用于每个需要上传的图片,生成一个Promise对象并存储在tmpFilePromises数组中。在Promise.all()方法中,等待所有Promise对象的resolve或reject状态完成后,进行上传成功或失败的处理。注意,使用`wx.compressImage()`方法会生成一个新的压缩后的临时图片文件,需要在上传成功后将其删除。
阅读全文