鸿蒙应用开发之应用如何实现腾讯云对象存储?
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();
// ===================
})
}
}
}

浙公网安备 33010602011771号