uniapp 云开发 阿里云上传文件
uniapp的出现,让前端人员和后端人员实现了“全栈”的小梦想,当然,真正跨端开发的时候,还是会遇到不少的问题,比如今天我们的主角,uniCloud.uploadFile
,一般来说,这个api文件名动态生成,云端返回文件存储的链接即可,但是,假如我们的产品是针对用户存储的,即用户的头像、私有文件、图片等具有唯一性,要单独开个目录存放的时候,同样的文件名上传会存在无法覆盖的情况,也就是报错 policy_does_not_allow_file_overwrite
uploadFile API
该API接收一个参数对象,一共有三个属性,分别是:filePath
、cloudPath
、cloudPathAsRealPath
,filePath
为 uni.chooseImage
调用成功后返回的文件本地路径,当只提供这个参数值时候,云开发会将文件统一上传到当前空间下某个默认存储目录,文件名是一串字母和数字;当想文件存储在指定目录的情况下,需要设置cloudPath
且 cloudPathAsRealPath
设置为 true,注意,cloudPath
不仅仅是目录,它还包含文件名!
如何解决文件无法覆盖上传
根据官方文档,客户端也是有云端文件删除的API,但是 仅腾讯云支持该操作且需要自定义登录腾讯云账号,支付宝和阿里云则不支持。但是云函数内是可以操作删除云端文件的,具体操作流程分为两步:
- 获取云端文件ID,即完整的文件地址,它由几部分组成:云存储下载域名、文件路径和文件名,可以去自己的uniapp后台查看内置下载域名,文件路径是动态的话,那么代码中要前端传入,比如uid,文件名也是;
- 调用删除API
uniCloud.deleteFile
, 参数对象只有一个属性 fileList,值为数组,存放文件的ID,之后前端在删除接口回调后再执行上传文件的操作即可
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。