发布时间:2025-12-09 16:31:06 浏览次数:4
微信云托管对象存储用于存放数据或文件,一般用于较大数据或较大文件上传时的中转对象,避免直接上传到服务端,影响服务性能。
开通了云托管平台后会自动开通对象存储功能。简单理解就是一个文件目录即可。
所有对象文件的权限统一管理,有以下几种类型:
显示存储桶信息,以及安全访问域名,缓存配置等等。
访问方式分为:
参考官方文档
采用wx.cloud.uploadFile云函数上传文件,可以自动根据小程序上传到指定云托管对象存储中。
| cloudPath | 云存储路径,命名限制见文件名命名限制 | String | - | 是 |
| filePath | 要上传文件资源的路径 | String | - | 是 |
| config | 配置 | Object | - | 否 |
| success | 成功回调 | |||
| fail | 失败回调 | |||
| complete | 结束回调 |
采用wx.cloud.downloadFile云函数下载文件.
| fileID | 云文件 ID | String | - | 是 |
| config | 配置 | Object | - | 否 |
| success | 成功回调 | |||
| fail | 失败回调 | |||
| complete | 结束回调 |
注意:服务端上传的文件需要添加文件元数据才能被小程序访问,否则访为空路径失败,目前我还未尝试成功,后面博客专门解决这个现象。
采用wx.cloud.getTempFileURL云函数获取文件URL地址.应该是共享作用。
export const tempObjFileUrl = (option)=>{ return new Promise((success,fail)=>{ wx.cloud.getTempFileURL({ fileList:[ { fileID:option.fileID, } ],success:success,fail:fail }) })}参考官方文档
参考Java Cos SDK
SDK使用步骤:
注意事项:
依赖:
<dependency> <groupId>com.qcloud</groupId> <artifactId>cos_api</artifactId> <version>5.6.24</version> </dependency>在云托管平台服务管理下的云调用配置中配置需要访问的微信开放接口,配置接口路径即可(以根路径开始)
实际效果,假如存在开放接口http://api.weixin.qq.com/_/cos/getauth?accessToken=token,原本需要携带accessToken信息,当配置了开放接口配置/_/cos/getauth,则服务端代码内部实际访问http://api.weixin.qq.com/_/cos/getauth即可,无需专门先获取accesToken再发起请求,这也是云托管/云开发的优势。
该请求需要服务端自己通过http请求获取,非通过SDK
http://api.weixin.qq.com/_/cos/getauth返回内容(json格式):
{ "TmpSecretId": "", // 临时密钥的 tmpSecretId "TmpSecretKey": "", // 临时密钥的 tmpSecretKey "Token": "", // 临时密钥的 sessionToken "ExpiredTime": "" // 临时密钥失效时间戳,是申请临时密钥时,时间戳加 durationSeconds}通过PutObjectRequest请求和client.putObject实现上传文件或流数据。
private String prefix="";//文件存放路径 private String bucketName="";// 对象存储桶信息,见对象存储设置信息 public String upload(String fileName, InputStream is,String openId) { COSClient cosClient = getClient(); if (cosClient==null) throw new RuntimeException("get cos client is error!"); try { String key = config.getPrefix() + fileName; LOGGER.info("upload cos obj:{}",key ); //创建存储对象的请求 PutObjectRequest putObjectRequest = new PutObjectRequest(config.getBucketName(), key, is,new ObjectMetadata()); //执行上传 cosClient.putObject(putObjectRequest); LOGGER.info("upload success:{}",key); return key; // 返回了对象存储的完整路径 } catch (CosClientException e) { LOGGER.error("upload fail!",e); } finally { cosClient.shutdown(); } return null; }注意:这里需要对文件元数据操作,否则小程序无法访问,见后续博客解决。
通过GetObjectRequest请求和client.getObject实现获取文件或流数据。
// 这里我直接返回的是流数据 public InputStream getObj(String fileName) { if (fileName==null) return null; COSClient cosClient = getClient(); if (cosClient==null) throw new RuntimeException("get cos client is error!"); try{ String key = config.getPrefix() + fileName; LOGGER.info("get cos obj:{}",key ); //创建存储对象的请求 GetObjectRequest getObjectRequest = new GetObjectRequest(config.getBucketName(), key); return cosClient.getObject(getObjectRequest).getObjectContent(); }catch (Exception ex){ LOGGER.error("get cos object is error!",ex); }finally { cosClient.shutdown(); } return null; }