如题,云函数使用uploadFile上传比较大的图片(特别是用苹果手机拍出来的照片),上传会失败,云函数代码见下方。
请问大佬们,①上传图片比较好的方法是什么呢?②如果还是使用我这种方法,怎么有效的压缩图片不影响图片质量还能完成上传呢?
感谢感谢!
云函数:exports.main = async (event, context) => {
try {
return await cloud.uploadFile({
cloudPath: event.path,
fileContent: new Buffer(event.file, 'base64')
})
} catch (e) {
return e;
}
}
通常用 wx.cloud.uploadFile 更快且是大文件(没测试过上限但 5M 内可以)。
若因故上述指令不能执行,可尝试:自建云函数,并在其中用 cloud.uploadFile 上传指令。但经测试,整个过程只能上传不超过 70K 的文件。至于 Base64方式上传,试过发现效率不高(估计是转码的原因)。
1. 在本地用 wx.getFileSystemManager().readFile() 读取文件内容到 res.data;
2. 在本地用 wx.cloud.callFunction 调用(自建的)云函数并带参传递 res.data。经测试这个 res.data 在 70K 内没问题;
3. 在云函数内用 Buffer.from(res.data) 接收上传的数据块。Buffer 是 Node.js 的一个类。
4. 在云函数内用 cloud.uploadFile({cloudPath: path1, fileContent: Buffer.from(res.data), })上传到云存储。
wx.cloud.CDN 了解一下
wx.cloud.callFunction({
name: “upload_image”,
data: {
path: this.data.path,
file: wx.cloud.CDN({
type: "filePath",
file:list.base64Code
})
},