鸿蒙应用开发之应用如何实现腾讯云对象存储?

1. 需求

https://cloud.tencent.com/document/product/436/112125

2. 由来

明确1:公司开发项目必须有上传图片,这些图片最初就和接口也就是java代码放在一起

明确2:一台服务器每秒读写有上限 =》 就好比厕所坑位 同时蹲坑有上限

明确3:考虑到性能问题 图片、样式、接口代码也就是java代码、包括数据库 得放到不同服务器

方案1;每个公司自己搞一个服务器

方案2:用服务器供应商的 (对象存储产品-专门放图片视频等等、云数据库)

回答:选择方案2,还有额外好处例如CDN、例如图片裁剪水印

CDN

大致使用流程

1-下模块

2-导入模块

3-修改配置信息

3. 腾讯云对象存储

步骤1:注册账号 https://cloud.tencent.com/document/product/436/112125

步骤2:个人中心、访问管理、用户列表、新建用户 -》 点击进去 操作 API密钥 (新增就可以看到secretID/secretKey)

https://console.cloud.tencent.com/cam

步骤3:左上角搜索产品对象存储、创建存储桶列表 https://console.cloud.tencent.com/cos/bucket

步骤4:根据步骤1、2、3操作 https://cloud.tencent.com/document/product/436/112125

复制代码
import { CosError, QCloudCredential } from '@tencentcloud/cos';
import { CosXmlBaseService, CosXmlServiceConfig } from '@tencentcloud/cos';
import { PutObjectRequest, UploadTask } from '@tencentcloud/cos';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { CosXmlUploadTaskResult } from '@tencentcloud/cos/src/main/ets/transfer/UploadTask';
import log from '@open/log';

// 获取临时密钥(业务层控制获取的方式)
let credential : QCloudCredential= new QCloudCredential();
credential.secretID = "AKIDd8UebLvISSJ883qiQxJix0xjKl04zkJg";
credential.secretKey = "HPL6iBVdZIqEfPxLWdp5EGD2lLlHnBNS";
// credential.token = "token";
// startDate和expirationDate均为Date类型,此处通过毫秒时间戳构造Date
// credential.startDate = new Date();
// credential.expirationDate = new Date();

@Entry
@Component
struct Test {

  @State img:string | undefined = ''

  build() {
    Column() {
      Image(this.img).width(300)
      Button('文档上传').onClick(async () => {
        log.init({close:false,tag:"✨"})


        let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
        PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
        PhotoSelectOptions.maxSelectNumber = 1;
        let photoPicker = new photoAccessHelper.PhotoViewPicker();
        let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(PhotoSelectOptions);
        const localPath:string = photoSelectResult.photoUris[0];

        log.info('00000')
        log.info(localPath)


        // 服务配置
        let cosXmlServiceConfig = new CosXmlServiceConfig("ap-beijing"); // ✅
        // 初始化默认的Service
        CosXmlBaseService.initDefaultService(
          // this.context.getApplicationContext(),
          getContext(this),
          cosXmlServiceConfig,
          async () => credential
        )

        // 任何CosXmlRequest都支持这种方式,例如上传PutObjectRequest、下载GetObjectRequest、删除DeleteObjectRequest等
        // 以下用上传进行示例
        let putRequest = new PutObjectRequest("slj-1257200217", "temp1111111.jpg", localPath);  // ✅
        // credential为第一步"初始化密钥"中获取到的单次临时密钥
        putRequest.credential = credential;
        let task: UploadTask = CosXmlBaseService.default().upload(putRequest);
          task.onResult = {
            onSuccess: (request, result: CosXmlUploadTaskResult) => {
              // const match = result.accessUrl!.match(/user\/.*/)
              // todo 上传成功后的逻辑
              // this.upload({avatar:result.picUploadResult?.originalInfo?.key as string})
              // this.upload({ avatar: match![0] })
              log.info(1111)
              log.info(result.accessUrl)
              this.img = result.accessUrl
            },
            onFail: (request, error: CosError) => {
              // todo 上传失败后的逻辑
              log.info(2222)
              log.info(error)
            }
          }
        task.start();
          // ===================
      })
    }
  }
}

鸿蒙开发者班级

相关推荐
niucloud-admin21 分钟前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github
小叶肥辉25 分钟前
LangChain链和LangGraph图的学习笔记【三】——分别用langchain_openai库和langchain_community库调用大模型
笔记·python·langchain
2401_873479401 小时前
IP属地为什么有时显示外省?用IP查询工具核查动态分配、运营商出口与GeoIP库
python·tcp/ip·ip
OKkankan3 小时前
LangChain 能力详解!:输出解析、RAG、向量数据库与 Retriever 检索器
数据结构·python·langchain·ai应用
红海云3 小时前
Prompt越长越好吗?何时该停手
云计算
山哥ol4 小时前
【Geany 环境配置与中文乱码解决参考】
python
会飞锦鲤4 小时前
基于 Mask R-CNN 的药片缺陷检测系统
人工智能·pytorch·python·神经网络·resnet-50
默 语4 小时前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
清水白石0085 小时前
Python 异步编程深度解析:Cancellation 到底是异常还是控制信号?从 asyncio 取消机制到企业级事务设计最佳实践
开发语言·python
Patrick在香港5 小时前
Python 审计香港开放数据目录:两个端点差 10 倍,只有 9.3% 的资源标了「最后修改时间」
开发语言·数据库·python·数据分析·api·数据治理·开放数据