头图

uniapp 云开发 阿里云上传文件

uniapp的出现,让前端人员和后端人员实现了“全栈”的小梦想,当然,真正跨端开发的时候,还是会遇到不少的问题,比如今天我们的主角,uniCloud.uploadFile,一般来说,这个api文件名动态生成,云端返回文件存储的链接即可,但是,假如我们的产品是针对用户存储的,即用户的头像、私有文件、图片等具有唯一性,要单独开个目录存放的时候,同样的文件名上传会存在无法覆盖的情况,也就是报错 policy_does_not_allow_file_overwrite

uploadFile API

该API接收一个参数对象,一共有三个属性,分别是:filePathcloudPathcloudPathAsRealPathfilePathuni.chooseImage调用成功后返回的文件本地路径,当只提供这个参数值时候,云开发会将文件统一上传到当前空间下某个默认存储目录,文件名是一串字母和数字;当想文件存储在指定目录的情况下,需要设置cloudPathcloudPathAsRealPath设置为 true,注意,cloudPath不仅仅是目录,它还包含文件名!

如何解决文件无法覆盖上传

根据官方文档,客户端也是有云端文件删除的API,但是 仅腾讯云支持该操作且需要自定义登录腾讯云账号,支付宝和阿里云则不支持。但是云函数内是可以操作删除云端文件的,具体操作流程分为两步:

  1. 获取云端文件ID,即完整的文件地址,它由几部分组成:云存储下载域名、文件路径和文件名,可以去自己的uniapp后台查看内置下载域名,文件路径是动态的话,那么代码中要前端传入,比如uid,文件名也是;
  2. 调用删除API uniCloud.deleteFile, 参数对象只有一个属性 fileList,值为数组,存放文件的ID,之后前端在删除接口回调后再执行上传文件的操作即可

何弃疗
106 声望7 粉丝

前端路上摸爬滚打;野路子前端debug