【小程序】微信云托管对象存储管理

news2024/11/23 0:57:17

微信云托管对象存储用于存放数据或文件,一般用于较大数据或较大文件上传时的中转对象,避免直接上传到服务端,影响服务性能。

对象存储

开通了云托管平台后会自动开通对象存储功能。简单理解就是一个文件目录即可。
请添加图片描述

存储文件

请添加图片描述

  • 文件名称:如果上传时未指定,会自动生成唯一标识
  • File ID:小程序一般通过该信息访问,格式cloud://{对象存储域名}.${对象存储桶信息}/${对象存储目录}/${文件名称}
  • 详情中还有文件的访问地址

存储权限

所有对象文件的权限统一管理,有以下几种类型:

  • 所有用户可读,仅创建者可读写
  • 仅创建者可读写
  • 所有用户可读
  • 所有用户不可读写
  • 自定义安全规则
    请添加图片描述

存储配置

显示存储桶信息,以及安全访问域名,缓存配置等等。
请添加图片描述

访问

访问方式分为:

  • API方式:即通过http协议管理存储对象
  • SDK方式:通过官方COS-SDK管理存储对象,实际内部也是使用的api方式

小程序访问

参考官方文档

上传文件

采用wx.cloud.uploadFile云函数上传文件,可以自动根据小程序上传到指定云托管对象存储中。

字段说明数据类型默认值必填
cloudPath云存储路径,命名限制见文件名命名限制String-
filePath要上传文件资源的路径String-
config配置Object-
success成功回调
fail失败回调
complete结束回调
export const uploadObjFile = (filePath,fileName)=>{
    if(fileName == undefined){
        fileName = filePath.slice(filePath.lastIndexOf("/") + 2 , filePath.length)
    }
    return new Promise((success,fail)=>{
        wx.cloud.uploadFile({
            // config:config,
            cloudPath:`${cloud_path}/${fileName}`, // 云托管对象存储中的文件路径
            filePath:filePath, // 本地文件
            success:success, // 成功回调
            fail:fail // 异常回调
        })
    })
}

下载文件

采用wx.cloud.downloadFile云函数下载文件.

字段说明数据类型默认值必填
fileID云文件 IDString-
config配置Object-
success成功回调
fail失败回调
complete结束回调
export const downloadObjFile=(fileID)=>{
    return new Promise((success,fail)=>{
        wx.cloud.downloadFile({
            fileID: fileID,
            success:success,
            fail:fail
        })
    })
}

注意:服务端上传的文件需要添加文件元数据才能被小程序访问,否则访为空路径失败,目前我还未尝试成功,后面博客专门解决这个现象。

获取Url地址

采用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)

参考官方文档
参考Java Cos SDK

SDK使用步骤:

  1. 使用开放接口服务获取临时密钥。
  2. 使用临时密钥初始化COS-SDK
  3. 使用COS-SDK做增删改查等操作。
  4. 上传文件时,需要使用开放接口服务获取文件元数据,保证小程序端可以访问。

注意事项:

  • 云托管服务时只要配置了开放接口,就可以免accessToken访问微信的指定开放接口
  • 临时密钥是由时效的,如果操作不频繁时,建议每次操作前都重新获取新的临时密钥
  • 通过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
}

生成CosClient

    private String secretId = "TmpSecretId"; // 临时密钥中的TmpSecretId
    private String secretKey = "TmpSecretKey"; // 临时密钥中的TmpSecretKey
    private String token = "Token"; // 临时密钥中的Token
    private String region="region"; // 区域信息,见对象存储设置中的存储信息,如ap-shanghai
    private COSClient getClient(){
        try{
            ClientConfig clientConfig = new ClientConfig(new Region(region));
            COSCredentials cosCredentials = new BasicSessionCredentials(secretId, secretKey, token);
            //生成cos客户端
            return new COSClient(cosCredentials, clientConfig);
        }catch (Exception ex){
            LOGGER.error("get cos client is error!",ex);
        }
        return null;
    }

上传文件

通过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;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/519201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

串口全双工通信与串口中断

1.串口通信编程 STC-ISP串口助手的使用&#xff1a; 文本模式和HEX模式的区别&#xff1a;文本模式就是那些可打印的字符。HEX模式就是这些可打印字符对应的16进制。它们都对应相同的ASCII码&#xff08;用十进制表示&#xff09;。 很多小白在程序编写完成后调试时会搞不清楚…

利用notepad++处理数据,再用excel做则线图

1、利用串口调试XCOM V2.8得到数据 2、利用Notepad编辑数据 利用正则表达式 删除时间戳 移除空行 继续删掉不要的数据 3、用excel生成折线图 复制数据到excel excel自动根据上文公式填充计算 输入0.1和0.2 框选0.1和0.2&#xff0c;下拉

JavaScript-jQuery的使用 + JS的案例

目录 点击更换图片 猜数字 搜索页面展示 表白墙 点击更换图片 我们先看下面这个例子: 使用input里面的button按钮, 并且利用函数, 将一个搜狗logo转换为百度logo: <!DOCTYPE html> <html lang"en"> <head><meta charset&…

Maven下载安装及IDEA配置Maven的超详细教程

Maven下载安装及IDEA配置Maven的超详细教程 1、IntelliJ IDEA 下载、安装及配置过程2、maven下载、安装、配置过程2.1 mavan下载2.2 安装2.3 配置 3、在IDEA中配置Maven3.1 进入设置界面3.2 maven配置 4、IDEAmaven创建工程示例 Maven是一个能使我们的java程序开发节省时间和精…

ssl证书过期

SSL证书验证网站所有者的身份&#xff0c;并为其访问者建立与服务器的安全加密连接。它保护他们的安全和隐私。 但SSL证书并非永远有效。与您的驾驶执照或护照一样&#xff0c;SSL证书也有过期日期。过期日期后&#xff0c;服务器的身份不再受信任。 为什么网站安全证书会过期…

C++ 类与对象中类的深入知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏

绪论 本章我们接着对类和对象进行探索&#xff0c;这是一个在我们c中比较重要的知识点&#xff0c;下面我们才是我们类和对象的更加深入且困难的知识点&#xff0c;希望你能通过这篇文章对类其有更加深入的了解。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看…

使用Taskflow完成简历信息提取

构建模型的步骤&#xff1a; 首先要进行数据处理&#xff0c;抽取简历文件中的数据。 首先要准备数据集&#xff0c;大赛提供的数据集中多为word文档&#xff0c;都为.docx格式&#xff0c; docx文件是基于 XML 的&#xff0c;可以包含文本&#xff0c;对象&#xff0c;样式&…

想让你的应用程序更加可靠?来了解Spring事务的回滚机制吧!

嗨&#xff0c;大家好&#xff0c;我是小米&#xff0c;今天要和大家聊一聊关于Spring框架事务的回滚源码实现。 相信对于使用Spring框架的小伙伴来说&#xff0c;事务管理肯定是非常重要的一个环节&#xff0c;事务的管理不好很容易出现各种问题&#xff0c;如数据不一致等。…

二十五:修改交易

1.功能需求 点击交易的复选框&#xff0c;然后点击修改按钮。进行数据的页面填充 1.流程图 1.代码实现 TranMapper /*** 根据id查询交易*/Tran selectTranDetailFortranId(String tranId); <!-- Tran selectTranDetailFortranId(String tranId);--><select id"…

项目集战略一致性

项目集战略一致性是识别项目集输出和成果&#xff0c;以便与组织的目标和目的保持一致的绩效领域。 本章内容包括&#xff1a; 1 项目集商业论证 2 项目集章程 3 项目集路线图 4 环境评估 5 项目集风险管理战略 项目集应与组织战略保持一致&#xff0c;并促进组织效益的实现。为…

【博客系统】页面设计(附完整源码)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、页面介绍 二、预期效果 1、博客列表页效…

刚面试了一位5年的Android开发,一问三不知,他还反怼我...

最近帮部门主管面试了很多人&#xff0c;从简历上看这些人的工作年限都不短&#xff0c;但做的都是一些传统的项目&#xff0c;想做现在大环境越来越难&#xff0c;大家找工作都不容易&#xff0c;就打算见一见。 在沟通中发现&#xff0c;由于年限不小&#xff0c;他们的定位…

十、Feign客户端

目录 1、在springcloud-order项目中引入Feign客户端的依赖 2、在server-order服务的启动类中添加注解EnableFeignClients 3、使用FeignClient注解声明Feign客户端需要调用的远程接口 3.1、server-pay服务提供远程接口Controller 3.2、server-member服务提供远程接口Contro…

ES基础知识总结含SQL、DSL、GOLANG

一、简介 Elasticsearch是一个基于Lucene的全文搜索和分析引擎&#xff0c;Lucene Core是一个完全用Java编写的高性能、全功能搜索引擎库。 它可以快速地存储、实时搜索和分析大量数据。 它可以扩展到上百台服务器&#xff0c;处理PB级数据。PB 2^50 Byte&#xff0c; 在数…

联通数科面试准备

Spring中Bean的生命周期 Spring Bean的生命周期全过程分为5个阶段&#xff0c;创建前准备阶段、创建实例阶段、依赖注入阶段和容器缓存阶段以及销毁实例阶段。 阶段1&#xff1a;创建前准备阶段这个阶段主要是在开始Bean加载之前&#xff0c;从Spring上下文中去获取相关的配置…

如何使用Alchemy开发NFT智能合约(ERC721)

&#x1f978; 本教程翻译自官网&#xff1a;[https://docs.alchemy.com/docs](https://docs.alchemy.com/docs)。对部分内容进行了修改。教程中所有实例经过本人实践&#xff0c;代码可见&#xff1a;https://github.com/ChuXiaoYi/web3Study 使用Solidity开发智能合约并在区块…

2022 第十三届蓝桥杯大赛软件赛决赛, 国赛,C/C++ 大学B组题解

2022 第十三届蓝桥杯大赛软件赛决赛, 国赛&#xff0c;C/C 大学B组题解 文章目录 第1题 —— 2022 &#xff08;5分&#xff09;第2题 —— 钟表 &#xff08;5分&#xff09;第3题 —— 卡牌 &#xff08;10分&#xff09;第4题 —— 最大数字 &#xff08;10分&#xff09;第…

bbys_tu_2016

1,三连 思路&#xff1a;栈溢出 2&#xff0c;IDA分析 利用函数&#xff1a; 思路:ret2text 偏移&#xff1a;24 3&#xff0c;payload from pwn import * context.log_level"debug"rremote(node4.buuoj.cn,29195)flag 0x804856Dpayload 24 * a p32(flag) r.se…

Unittest单元测试框架之unittest构建测试套件

构建测试套件 在实际项目中&#xff0c;随着项目进度的开展&#xff0c;测试类会越来越多&#xff0c;可是直到现在我 们还只会一个一个的单独运行测试类&#xff0c;这在实际项目实践中肯定是不可行的&#xff0c;在 unittest中可以通过测试套件来解决该问题。 测试套件&…

七、Zookeeper注册中心

目录 1、下载Zookeeper的服务jar包 2、下载好jar包后解压放到合适的目录&#xff08;目录最好不要有中文及空格&#xff09; 3、进入解压后的conf目录&#xff0c;复制zoo_sample.cfg文件并重命名为zoo.cfg&#xff0c;修改zoo.cfg文件内容如下 4、运行bin目录下的zkServer…