uniCloud云存储无真实目录,文件分类靠filePath路径字符串模拟,如"user/avatar/123456.jpg";阿里云删除需云函数,腾讯云支持前端直接删;数据库须冗余category等字段以高效查询。

uniCloud 云存储本身不支持前端直接创建文件夹,所谓“分目录”本质是通过文件路径字符串模拟的逻辑结构。阿里云和腾讯云在这一机制上表现一致,但删除操作限制不同——阿里云必须走云函数,腾讯云允许前端直接删。
uni.uploadFile 的 filePath 参数怎么写才算“分类”
云存储没有真实目录,filePath 是一个带斜杠的字符串,服务端会按此路径组织文件。比如上传头像时传 "user/avatar/123456.jpg",上传商品图时传 "product/2024/06/abc.png",这些前缀就是你定义的“分类目录”。
- 路径必须以字母或数字开头,不能以
/开头,也不能含..或空格 - 建议统一小写、用短横线(
-)代替下划线,避免大小写混用导致查询失败 - 不要硬编码时间戳到路径里(如
"log/20260617.log"),容易造成冷热数据混杂;可用"log/year-2026/month-06/"这类可预测结构 - 上传前建议用
uni.preUploadFile预检,避免因路径非法被静默拒绝
腾讯云 vs 阿里云:删除文件时的路径处理差异
前端调用 uni.removeFile 时,传入的 fileID 实际是上传后返回的完整路径(如 "user/avatar/123456.jpg")。但两者的权限模型不同:
- 腾讯云:前端可直接传该路径调用
uni.removeFile,只要文件属于当前用户空间且未开启白名单校验 - 阿里云:前端调用会报错
errCode: -404001, errMsg: "permission denied",必须封装云函数,由云函数调用cloud.deleteFile并校验用户权限 - 若项目需同时支持双云,建议统一走云函数删除,避免平台逻辑分支扩散
云数据库如何配合路径做分类查询
单纯靠路径字符串无法高效筛选,必须在数据库里存一份冗余字段。比如上传成功后,在 photo 集合中插入:
{
"fileID": "product/2024/06/abc.png",
"category": "product",
"subPath": "2024/06/",
"uploader": "uid_789",
"createdAt": "2026-06-17T14:22:00Z"
}
这样查某类图片就不用模糊匹配 fileID,而是用:
-
db.collection('photo').where({ category: 'product' })—— 快速定位 -
db.collection('photo').where({ subPath: '2024/06/' })—— 按时间归档 - 组合查询时,
category和subPath字段加索引,避免全表扫描
实际开发中最容易忽略的三个点
一是路径拼接时漏掉斜杠,比如写成 "user" + "avatar/123.jpg" 得到 "useravatar/123.jpg",结果文件进了错误“目录”;二是没对用户上传的原始文件名做清洗,含中文或特殊符号的 fileName 直接拼进路径,导致某些平台解析失败;三是云函数里用 cloud.downloadFile 临时读取文件做处理时,忘了删临时文件,撑爆云函数内存限额。


















