Cloud Foundation Kit(云开发服务)可以按需为应用提供云函数、云数据库、云存储、预加载等云端服务。而今天所讲的云存储便是其中重要的一个服务,它提供高效、经济的文件存储服务,为应用的文件上传、下载、保存和分享提供可靠支撑。
首先开通云存储服务,已开通,可以跳过此步骤。具体可以参考:开通云存储服务
1、登录AppGallery Connect,点击“开发与服务”。
2、在项目列表中点击需要开通云存储的项目。
3、选择“云开发(Serverless) > 云存储”,进入云存储页面,点击“立即开通”。
云存储配置项以及实现云存储功能
1、在module.json5中添加网络权限
"requestPermissions": [ { "name": "ohos.permission.INTERNET" }
]
2.1前提条件
安装HUAWEI DevEco Studio 5.0.3.100及以上版本,配置 SDK API Version 12及以上,添加配置文件agconnect-services.json,将其拷贝到DevEco Studio项目的“entry\src\main\resources\rawfile”目录下。
2.2配置SDK依赖,使用命令安装sdk
ohpm install @hw-agconnect/auth
3.1初始化应用级上下文
在“entry/src/main/ets/common”目录下添加GlobalContext.ets文件
3.2在EntryAbility.ets中实现auth的初始化
在entry模块下的src/main/ets/entryability/EntryAbility.ets中添加以下代码:
GlobalContext.initContext(this.context)let file = this.context.resourceManager.getRawFileContentSync('agconnect-services.json');let json: string = buffer.from(file.buffer).toString();auth.init(this.context, json);
并且调用cloudCommon.init()方法进行初始化时,传入获取的凭据
let provider = auth.getAuthProvider(); // 在用户登录成功的情况下调用此方法获取authProvider cloudCommon.init({ region: cloudCommon.CloudRegion.CHINA, authProvider: provider, functionOptions: { timeout: 10 * 1000 }, storageOptions: { mode: request.agent.Mode.BACKGROUND, network: request.agent.Network.ANY }, // databaseOptions: { schema: "schema.json", traceId: "traceId" } })
3.3在src/main/module.json5的metadata 中添加 client_id
4、开通并使用认证服务
4.1开通认证服务
选择“云开发(Serverless)> 认证服务”,进入认证服务的页面。如果首次使用认证服务,请点击“立即开通”开通服务。
4.2启用认证方式
目前使用邮箱地址、华为账号、以及匿名账号认证,如果使用手机号码认证,认证服务的验证/通知短信将不再由HUAWEI AppGallery Connect发送,需要您自行购买第三方短信服务。认证服务可对接您提供的短信发送接口,来进行后续短信的正常下发。在认证服务界面中,开启对应的服务即可。
下面为使用华为账号认证的代码片段:
Button('华为账号登录') .onClick(()=>{ auth.signIn({ autoCreateUser: true, "credentialInfo": { "kind": 'hwid' } }).then(signInResult => { hilog.info(0x0000, 'testTag', '%{public}s', `signInHwid success. result: ${signInResult.getUser().getUid()}`); hilog.info(0x0000, 'testTag', '%{public}s', `signInHwid success. result: ${JSON.stringify(signInResult.getUser())}`); hilog.info(0x0000, 'testTag', '%{public}s', `signInHwid success. result: ${JSON.stringify(signInResult)}`); }) .catch((error: BusinessError) => { hilog.error(0x0000, 'testTag', '%{public}s', `signInHwid error, Code: ${error.code}, message: ${error.message}`); }) })
let storageBucket: cloudStorage.StorageBucket = cloudStorage.bucket();
// 上传指定文件至云侧upload() { this.selectPhoto().then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => { let fileUri = photoSelectResult.photoUris[0]; hilog.info(0x0000, 'testTag', `pick file ${fileUri}`); let fileName = fileUri.split('/').pop() as string; hilog.info(0x0000, 'testTag', `file name ${fileName}`); let cacheFile = GlobalContext.getContext().cacheDir + '/' + fileName; hilog.info(0x0000, 'testTag', `cacheFile ${cacheFile}`); // 将选中文件copy至cache目录下 this.copyFile(fileUri, cacheFile); // 上传至云存储默认实例 this.uploadFile(cacheFile, `screenshot/${fileName}`); }).catch((err: BusinessError) => { hilog.error(0x0000, 'testTag', `Failed to upload file, code: ${err.code}, message: ${err.message}`); })}
5、勾选Automatically generate signature和Associate with registered application两个选项
使用关联注册应用的自动签名后,两个选项都勾选,项目运行成功后,点上传按钮,上传成功后,可以在云存储中查看上传文件。
云存储提供了简单易用、功能强大的端/云SDK,实现用户生成内容的存储,开发者无需关注云端能力的构建而聚焦业务逻辑开发,拥有可靠安全、节约成本、操作稳定、弹性伸缩等特点。本文依据Cloud Foundation Kit官方文档编写,实现从认证服务到上传文件到云存储的一整套过程,帮助开发者提升开发效率。
示例工程WeakWebSocket相关链接:https://gitcode.com/harmony_ecosystem_services/HarmonyOSAppDemo/tree/main/ApplicationServices/WeakWebSocket