微信云托管对象存储用于存放数据或文件,一般用于较大数据或较大文件上传时的中转对象,避免直接上传到服务端,影响服务性能。
开通了云托管平台后会自动开通对象存储功能。简单理解就是一个文件目录即可。
所有对象文件的权限统一管理,有以下几种类型:
所有用户可读,仅创建者可读写仅创建者可读写所有用户可读所有用户不可读写自定义安全规则
显示存储桶信息,以及安全访问域名,缓存配置等SEO靠我等。
访问方式分为:
API方式:即通过http协议管理存储对象SDK方式:通过官方COS-SDK管理存储对象,实际内部也是使用的api方式参考官方文档
采用wx.cloud.uploSEO靠我adFile云函数上传文件,可以自动根据小程序上传到指定云托管对象存储中。
字段说明数据类型默认值必填cloudPath云存储路径,命名限制见文件名命名限制String-是filePath要上传文件资源SEO靠我的路径String-是config配置Object-否success成功回调fail失败回调complete结束回调 export const uploadObjFile = (filSEO靠我ePath,fileName)=>{ if(fileName == undefined){ fileName = filePath.slice(filePath.lasSEO靠我tIndexOf("/") + 2 , filePath.length) } return new Promise((success,fail)=>{ SEO靠我wx.cloud.uploadFile({ // config:config, cloudPath:`${cloud_path}/${fileName}`, // 云托SEO靠我管对象存储中的文件路径 filePath:filePath, // 本地文件 success:success, // 成功回调 fail:fail //SEO靠我 异常回调 }) }) }采用wx.cloud.downloadFile云函数下载文件.
字段说明数据类型默认值必填fileID云文件 IDStrSEO靠我ing-是config配置Object-否success成功回调fail失败回调complete结束回调 export const downloadObjFile=(fileID)=>SEO靠我{ return new Promise((success,fail)=>{ wx.cloud.downloadFile({ fileID: fileISEO靠我D, success:success, fail:fail }) }) }注意:服务端上传的文件需要添加文件元数据才能被SEO靠我小程序访问,否则访为空路径失败,目前我还未尝试成功,后面博客专门解决这个现象。
采用wx.cloud.getTempFileURL云函数获取文件URL地址.应该是共享作用。
export cSEO靠我onst tempObjFileUrl = (option)=>{ return new Promise((success,fail)=>{ wx.cloud.getTSEO靠我empFileURL({ fileList:[ { fileID:option.fileID, } ],success:SEO靠我success,fail:fail }) }) }参考官方文档
参考Java Cos SDKSDK使用步骤:
使用开放接口服务获取临时SEO靠我密钥。使用临时密钥初始化COS-SDK使用COS-SDK做增删改查等操作。上传文件时,需要使用开放接口服务获取文件元数据,保证小程序端可以访问。注意事项:
云托管服务时只要配置了开放接口,就可以免accSEO靠我essToken访问微信的指定开放接口临时密钥是由时效的,如果操作不频繁时,建议每次操作前都重新获取新的临时密钥通过SDK上传的文件需要对文件配置元数据,否则小程序无法访问,这就是上面小程序下载文件时SEO靠我描述的问题原因。依赖:
<dependency> <groupId>com.qcloud</groupId> <artifactId>cos_api</artifactISEO靠我d> <version>5.6.24</version> </dependency>在云托管平台服务管理下的云调用配置中配置需要访问的微信开放接口,配置接口SEO靠我路径即可(以根路径开始)
实际效果,假如存在开放接口http://api.weixin.qq.com/_/cos/getauth?accessToken=token,原本需要携带accessToken信SEO靠我息,当配置了开放接口配置/_/cos/getauth,则服务端代码内部实际访问http://api.weixin.qq.com/_/cos/getauth即可,无需专门先获取accesToken再发起SEO靠我请求,这也是云托管/云开发的优势。
该请求需要服务端自己通过http请求获取,非通过SDK
http://api.weixin.qq.com/_/cos/getauth返回内容(json格式)SEO靠我:
{ "TmpSecretId": "", // 临时密钥的 tmpSecretId "TmpSecretKey": "", // 临时密钥的 tmpSecretKeySEO靠我 "Token": "", // 临时密钥的 sessionToken "ExpiredTime": "" // 临时密钥失效时间戳,是申请临时密钥时,时间戳加 durSEO靠我ationSeconds }通过PutObjectRequest请求和client.putObject实现上传文件或流数据。
private String prefix=""SEO靠我;//文件存放路径 private String bucketName="";// 对象存储桶信息,见对象存储设置信息 public String upload(StrSEO靠我ing fileName, InputStream is,String openId) { COSClient cosClient = getClient(); if SEO靠我(cosClient==null) throw new RuntimeException("get cos client is error!"); try { StrSEO靠我ing key = config.getPrefix() + fileName; LOGGER.info("upload cos obj:{}",key ); //创建SEO靠我存储对象的请求 PutObjectRequest putObjectRequest = new PutObjectRequest(config.getBucketName(), keySEO靠我, is,new ObjectMetadata()); //执行上传 cosClient.putObject(putObjectRequest); LOSEO靠我GGER.info("upload success:{}",key); return key; // 返回了对象存储的完整路径 } catch (CosClientExSEO靠我ception e) { LOGGER.error("upload fail!",e); } finally { cosClient.shutdown(SEO靠我); } return null; }注意:这里需要对文件元数据操作,否则小程序无法访问,见后续博客解决。
通过GetObjectRequSEO靠我est请求和client.getObject实现获取文件或流数据。
// 这里我直接返回的是流数据 public InputStream getObj(String fileName) SEO靠我{ if (fileName==null) return null; COSClient cosClient = getClient(); if (cSEO靠我osClient==null) throw new RuntimeException("get cos client is error!"); try{ StringSEO靠我 key = config.getPrefix() + fileName; LOGGER.info("get cos obj:{}",key ); //创建存储对象的请SEO靠我求 GetObjectRequest getObjectRequest = new GetObjectRequest(config.getBucketName(), key); SEO靠我 return cosClient.getObject(getObjectRequest).getObjectContent(); }catch (Exception ex){SEO靠我 LOGGER.error("get cos object is error!",ex); }finally { cosClient.shutdown(SEO靠我); } return null; }网站备案号:浙ICP备17034767号-2