Amaze UI Logo

码动指尖



微信小程序之云开发的uploadFile

在开发微信小程序的时候,图片上传必不可少的,自从有了云开发,问题就来了,小程序给我们提供了两个云开发的图片上传接口。


一个是小程序端的 uploadFile, 如下


wx.cloud.uploadFile

将本地资源上传至云存储空间,如果上传至同一路径则是覆盖写

请求参数

字段说明数据类型默认值必填
cloudPath云存储路径,命名限制见文件名命名限制String-Y
filePath要上传文件资源的路径String-Y
headerHTTP 请求 Header, header 中不能设置 RefererObject-N
config配置Object-N
success成功回调


fail失败回调


complete结束回调


一个是服务端的 uoloadFile,如下:


uploadFile

将本地资源上传至云存储空间,如果上传至同一路径则是覆盖。

请求参数

字段说明数据类型默认值必填
cloudPath云存储路径,命名限制见文件名命名限制String-Y
fileContent要上传文件的内容Buffer 或 fs.ReadStream-Y


小程序端的 uploadFile是及其简单的一个普通接口,直接配合 wx.chooseImage 使用即可。

但是服务端的 uploadFile 却是有坑了,因为他是写在云函数里面的,于是,上传的图片只能从 云函数对应的文件夹(云端) 里取,不能从本地取

我直接用的小程序端那一套来套服务端的 uploadFile接口,直接就报错了, 报错 是:文件不存在


于是,经过google一番搜索,最终找到以下文章:

https://www.cnblogs.com/masterchd/p/10662313.html


它的解决方法是,就在小程序端将其进行编码转化为stream流 直接传给 云函数里的uploadFile的参数 fileContent,并用 new Buffer(fileContent)解码,便可以了。


代码如下:

const tempFilePaths = res.tempFilePaths

wx.getFileSystemManager().readFile({
filePath: tempFilePaths[0],
encoding: 'base64',
success: res => {
wx.cloud.callFunction({
name: 'uploadFile',
data: {
cloudPath: 'test.jpg',
fileContent: res.data
}
}).then(res => {
db.collection('images').add({
data: {
fileID: res.result.fileID
},
success: res => {
console.log(res);
},
fail: err => {
console.log(err);
}
})
}).catch(err => {
console.log(err);
})
},
fail: err => {
console.log(err);
}
})



作者  :  奕弈

喵喵喵,你在心上



评论


About ME

about me

奕弈

为了最初的心,努力奋斗,从不懈怠的学习。

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

Contact ME