chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙海報(bào)編輯器APP,分享端云一體化開發(fā)的經(jīng)驗(yàn)!

陳姚豐 ? 來(lái)源:jf_83680738 ? 作者:jf_83680738 ? 2025-03-16 16:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

在我工作的日常中,經(jīng)常會(huì)用一些畫圖編輯器,簡(jiǎn)單設(shè)計(jì)一些頁(yè)面原型。而在去年低代碼很火的時(shí)候,我在公司就開發(fā)了一款大屏可視化編輯器,可以通過(guò)拖拉拽生成網(wǎng)頁(yè)的一個(gè)工具。后面也想著自己也開發(fā)一個(gè)畫圖的編輯器,可以用來(lái)自己平時(shí)做圖或者設(shè)計(jì)海報(bào)之類的。而這次我將使用鴻蒙ArkTs來(lái)開發(fā)這款海報(bào)編輯器APP,順便分享一下我這次的開發(fā)經(jīng)驗(yàn)。

項(xiàng)目架構(gòu)與開發(fā)流程

我這次項(xiàng)目功能架構(gòu)以及整體開發(fā)流程如下:

項(xiàng)目功能結(jié)構(gòu)

海報(bào)編輯器架構(gòu).png

整體開發(fā)流程

海報(bào)編輯器端云一體開發(fā)流程.png

這次開發(fā)我使用了鴻蒙的端云一體化的開發(fā)模式進(jìn)行整個(gè)項(xiàng)目的構(gòu)建。說(shuō)實(shí)話:之前我都是自己寫后端代碼,開發(fā)流程確實(shí)比較繁瑣。而云開發(fā)模式就很方便了,端側(cè)與云側(cè)同時(shí)開發(fā),無(wú)需搭建服務(wù)器,工具成本低。這點(diǎn)我還是很喜歡的。

端云一體化工程講解

端云一體化的工程我也是第一次開發(fā),相信很多伙伴也沒(méi)開發(fā)過(guò)。我這次用的是官方提供的云模板工程,我大概給大家講解一下:

image.png

整體結(jié)構(gòu)很簡(jiǎn)單,使用起來(lái)也比較方便。所有的操作DevEco Studio開發(fā)工具都集成了。

而在講解之前,使用云模板創(chuàng)建項(xiàng)目之前需要在華為開發(fā)平臺(tái)創(chuàng)建項(xiàng)目,具體創(chuàng)建流程可以到官方文檔查看,地址我也放在下面:https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/agc-harmonyos-clouddev-agcapp-0000001439436876-V3#section397317130308

注意:記得是創(chuàng)建項(xiàng)目哦,不是應(yīng)用。我一開始就搞錯(cuò)了

創(chuàng)建表與方法

  1. 比如你要新建一張數(shù)據(jù)庫(kù)表,只需在clouddb云數(shù)據(jù)庫(kù)入口文件點(diǎn)擊右鍵,點(diǎn)擊new,然后你選擇需要?jiǎng)?chuàng)建什么。
    image.png

而我比較喜歡在開發(fā)平臺(tái)創(chuàng)建,比較方便,傻瓜式操作。大家也可以看看官方文檔:https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides/agc-clouddb-createfirstclouddb-0000001569588629

2.比如你要?jiǎng)?chuàng)建一個(gè)云函數(shù)方法,也是只需在cloudfuntion云函數(shù)入口文件點(diǎn)擊右鍵,點(diǎn)擊new,然后你直接創(chuàng)建一個(gè)對(duì)應(yīng)的云函數(shù)即可。

image.png

開發(fā)函數(shù)與數(shù)據(jù)庫(kù)的使用

由于第一次使用云函數(shù)與云數(shù)據(jù)庫(kù),一路上磕磕碰碰。所以我打算將自己經(jīng)驗(yàn)都分享給大家,希望能幫助大家。

開發(fā)云函數(shù)

在創(chuàng)建云函數(shù)之后,代碼結(jié)構(gòu)如下:

image.png

其中有一個(gè)ts文件,這個(gè)就是我們的函數(shù)入口了,其他的我們都暫時(shí)不用動(dòng)。這里我默認(rèn)的是nodejs開發(fā)模式以及http請(qǐng)求模式。如果你們需要修改配置可以看一下官方文檔:https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides/agc-cloud-function-start-from-here-0000001512489692

ts文件里面默認(rèn)有一個(gè)主入口方法:

let myHandler = async function (event, context, callback, logger) {
  // 獲取你的參數(shù)
  const body = event.body ? JSON.parse(event.body) : event

  // 寫你的業(yè)務(wù)代碼

  callback({
      code: 200,
      data: [],
      msg: '提示內(nèi)容'
  });
};

export { myHandler };
  • myHandler:入口方法名稱。
  • event:調(diào)用方傳遞的事件對(duì)象,JSON格式。具體內(nèi)容請(qǐng)參見event對(duì)象
  • context:函數(shù)運(yùn)行時(shí)上下文對(duì)象,封裝了日志接口、回調(diào)接口、環(huán)境變量env對(duì)象等。
  • callback:事件處理結(jié)果。
  • logger:記錄日志。

這里需要注意的是:獲取參數(shù)的方式,我在本地調(diào)試的時(shí)候,event就是參數(shù)對(duì)象了,但是發(fā)布到云服務(wù)器之后,端側(cè)傳遞的參數(shù)需要通過(guò)event.body來(lái)判斷是否存在,然后將數(shù)據(jù)JSON化。也不知道是不是我用的不對(duì),但是目前我是遇到這個(gè)問(wèn)題了。

接下來(lái)我講解一下云函數(shù)調(diào)用云數(shù)據(jù)庫(kù)與云存儲(chǔ)的相關(guān)步驟。詳細(xì)步驟如下:

云函數(shù)使用云數(shù)據(jù)庫(kù)

1. 云數(shù)據(jù)庫(kù)注冊(cè)認(rèn)證

在使用云數(shù)據(jù)庫(kù)的所有方法時(shí),都需要先注冊(cè)認(rèn)證哈

const path = require('path');
const clouddb = require('@hw-agconnect/database-server/dist/index.js')
const { AGCClient, CredentialParser } = require("@hw-agconnect/common-server");
const db_demo = require('./db/bd_demo') // 從開發(fā)者平臺(tái)下載對(duì)應(yīng)的js配置文件,放在對(duì)應(yīng)的函數(shù)目錄根目錄下

// 加載憑證文件,憑證文件也是在開發(fā)者平臺(tái)下載,具體看我的截圖
let client_name = "./db/agc-apiclient-chen.json";
let client_path = path.join(__dirname, client_name);
let credential = CredentialParser.toCredential(client_path);
AGCClient.initialize(credential, "clientCN", "CN");

let myHandler = async function (event, context, callback, logger) {
  // xxxx
};

export { myHandler };

1.1 下載加載對(duì)象類型文件
image.png
1.2 將上面下載的文件引入到云函數(shù)目錄中
image.png
1.3 下載憑證文件
image.png

2. 初始化云數(shù)據(jù)庫(kù)實(shí)例以及打開存儲(chǔ)區(qū)

// 接著加載憑證文件的相關(guān)代碼下
const agcClient = AGCClient.getInstance("clientCN");
clouddb.AGConnectCloudDB.initialize(agcClient);
const agconnectCloudDB = clouddb.AGConnectCloudDB.getInstance(agcClient);
//云數(shù)據(jù)庫(kù)區(qū)塊,獲取方法看以下截圖
const zoneName = '區(qū)塊名稱';
const cloudDBZoneConfig = new clouddb.CloudDBZoneConfig(zoneName);
const mCloudDBZone = agconnectCloudDB.openCloudDBZone(cloudDBZoneConfig);

2.1 獲取區(qū)塊名稱
image.png

3. 使用云數(shù)據(jù)庫(kù)的方法

3.1 云數(shù)據(jù)庫(kù)-新增數(shù)據(jù)

需要注意的是:表名稱,直接寫對(duì)應(yīng)的字符串名稱就好

// 上面是注冊(cè)、加載憑證、打開存儲(chǔ)區(qū)的代碼

let myHandler = async function (event, context, callback, logger) {
  // 獲取你的參數(shù)
  const body = event.body ? JSON.parse(event.body) : event

  //表名稱也是通過(guò)開發(fā)者平臺(tái)獲取即可,字符串模式
  const bookInfo = clouddb.CloudDBZoneGenericObject.build('表名稱')
  // 添加屬性對(duì)應(yīng)的數(shù)據(jù),按照自己定義的字段格式去賦值
  bookInfo.addFieldValue('字段名稱1', '數(shù)據(jù)')
  bookInfo.addFieldValue('字段名稱2', '數(shù)據(jù)')
  // 同步插入表里
  const resp = await mCloudDBZone.executeUpsert(bookInfo)
  callback({
      code: 200,
      data: [],
      msg: '提示內(nèi)容'
  });
};

export { myHandler };

3.2 云數(shù)據(jù)庫(kù)-更新數(shù)據(jù)

需要注意的是:要先獲取表實(shí)例以及定位唯一鍵

const db_demo = require('./db/bd_demo')
// 上面是注冊(cè)、加載憑證、打開存儲(chǔ)區(qū)的代碼

let myHandler = async function (event, context, callback, logger) {
  // 獲取你的參數(shù)
  const body = event.body ? JSON.parse(event.body) : event
  
  // 引入表實(shí)例
  const bookInfo = new db_demo.db_demo();
  // 定位唯一鍵,目的找到對(duì)應(yīng)的數(shù)據(jù)
  bookInfo.setId('主鍵數(shù)據(jù)值') // 主鍵字段,自己在創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候需要自定義主鍵
  // 注冊(cè)
  const operator = clouddb.CloudDBZoneObjectOperator.build(bookInfo)
  operator.update('字段名稱1', 數(shù)據(jù)) // 更新對(duì)應(yīng)字段數(shù)據(jù)
  operator.update('字段名稱2', 數(shù)據(jù)) // 更新對(duì)應(yīng)字段數(shù)據(jù)
  operator.update('字段名稱3', 數(shù)據(jù)) // 更新對(duì)應(yīng)字段數(shù)據(jù)
  // ....
  // 更新表里數(shù)據(jù)
  const resp = await mCloudDBZone.executeUpdate(operator)
  callback({
      code: 200,
      data: [],
      msg: '提示內(nèi)容'
  });
};

export { myHandler };

3.2 云數(shù)據(jù)庫(kù)-查詢數(shù)據(jù)

這里需要注意的是:查詢方式有很多,我這邊只用到很基礎(chǔ)的。想要更多操作可以看一下官網(wǎng):https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides/agc-clouddb-otheroperations-servernodejs-0000001569466329#section171182910246

const db_demo = require('./db/bd_demo')
// 上面是注冊(cè)、加載憑證、打開存儲(chǔ)區(qū)的代碼

let myHandler = async function (event, context, callback, logger) {
  // 獲取你的參數(shù)
  const body = event.body ? JSON.parse(event.body) : event
  
  // 初始化表
  let cloudDBZoneQuery = clouddb.CloudDBZoneQuery.where(db_demo.db_demo)
  // 查詢字段名稱等于xxx的數(shù)據(jù)
  const userCloudDBZoneQuery = cloudDBZoneQuery.equalTo('字段名稱', 'xxx');
  const respUser = await mCloudDBZone.executeQuery(userCloudDBZoneQuery);
  const data = respUser.getSnapshotObjects()[0] // 獲取對(duì)應(yīng)數(shù)據(jù)
  callback({
      code: 200,
      data: [],
      msg: '提示內(nèi)容'
  });
};

export { myHandler };

3.3 云數(shù)據(jù)庫(kù)-刪除數(shù)據(jù)

刪除相關(guān)的操作我還沒(méi)使用過(guò),等我使用之后再補(bǔ)充給大家

云函數(shù)使用云存儲(chǔ)

1. 云存儲(chǔ)注冊(cè)認(rèn)證

在使用云存儲(chǔ)的所有方法時(shí),也是都需要先注冊(cè)認(rèn)證哈

import {AGCClient, CredentialParser} from "@agconnect/common-server"
import {StorageManagement, Bucket, File, AGCCloudStorage} from "@agconnect/cloudstorage-server"

// 加載憑證文件
let client_name = "./db/agc-apiclient-chen.json";
let client_path = path.join(__dirname, client_name);
let credential = CredentialParser.toCredential(client_path);
AGCClient.initialize(credential, "clientDW");

let storage = AGCCloudStorage.getInstance("clientDW");
// name: 存儲(chǔ)實(shí)例名稱,獲取方式從開發(fā)者平臺(tái)獲取
let bucket = storage.bucket('xxxx');

let myHandler = async function (event, context, callback, logger) {
  // xxxx
};

export { myHandler };

1.1 獲取存儲(chǔ)實(shí)例名稱

image.png

2. 使用云存儲(chǔ)的方法

2.1 上傳文件

需要注意的是:上傳文件需要注意destination的文件路徑規(guī)則。需要上傳的文件對(duì)應(yīng)的路徑則是本地路徑,文件在云函數(shù)的根目錄下,。后續(xù)我也會(huì)將怎么通過(guò)端側(cè)上傳圖片到云函數(shù)再上傳到云存儲(chǔ)的相關(guān)操作。

// 以上是認(rèn)證的相關(guān)代碼

let myHandler = async function (event, context, callback, logger) {
    const options = {
      destination:  'demo/demo.png', // 對(duì)應(yīng)云存儲(chǔ)中的文件路徑,demo文件夾需要自己在開發(fā)者平臺(tái)創(chuàng)建,文件名稱自定義,存在則覆蓋不存在則新增
      onUploadProgress: (event) = > {}
    };
    bucket.upload('需要上傳的文件路徑,例如:./static/demo.png', options);
};

export { myHandler };

2.2 下載文件

// 以上是認(rèn)證的相關(guān)代碼

let myHandler = async function (event, context, callback, logger) {
    const remoteFile = bucket.file(‘云存儲(chǔ)下的文件具體路徑’);
    const localFile = '需要上傳的文件路徑,例如:./static/demo.png'
    const directory = path.dirname(localFile);
    // 判斷本地是否有當(dāng)前文件,有則創(chuàng)建
    if (!fs.existsSync(directory)) {
      fs.mkdirSync(directory, { recursive: true });
    }
    
    // 下載云存儲(chǔ)的文件內(nèi)容到對(duì)應(yīng)的本地文件
    await remoteFile.createReadStream()
      .on('error', (err) = > {})
      .on('end', () = > {
        // 業(yè)務(wù)代碼
      })
      .pipe(fs.createWriteStream(localFile));
};

export { myHandler };

總結(jié)

這次的鴻蒙端云一體化的開發(fā)經(jīng)驗(yàn)就講解到這里,可能我講的不是很細(xì),因?yàn)橐彩堑谝淮问褂?,希望可以幫助大家。如果上面描述的有?wèn)題,歡迎大家在評(píng)論區(qū)指出來(lái),謝謝。后面我們也會(huì)分享端側(cè)的開發(fā)經(jīng)驗(yàn),以及會(huì)將對(duì)應(yīng)app上線,到時(shí)候有相關(guān)技術(shù)討論的都可以找我們

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2621

    瀏覽量

    44072
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一體化解決方案Jama Software,如何支持醫(yī)療設(shè)備開發(fā)中的需求管理、風(fēng)險(xiǎn)管理與驗(yàn)證?

    醫(yī)療設(shè)備開發(fā)中的需求管理太復(fù)雜?試試一體化解決方案Jama Connect——支持ISO 1497等關(guān)鍵標(biāo)準(zhǔn)的合規(guī)認(rèn)證、FMEA分析、可追溯性與變更管理等。
    的頭像 發(fā)表于 06-25 11:36 ?163次閱讀
    <b class='flag-5'>一體化</b>解決方案Jama Software,如何支持醫(yī)療設(shè)備<b class='flag-5'>開發(fā)</b>中的需求管理、風(fēng)險(xiǎn)管理與驗(yàn)證?

    Linux下Vim編輯器的使用技巧

    【Vim】常用總結(jié)? 簡(jiǎn)介? image 什么是vim?? Linux下兩大編輯神器之 vim ? Linux/Unix下使用最多的編輯器 ? vi的改進(jìn)版 ? 可能是最難上手的編輯器
    的頭像 發(fā)表于 04-01 17:36 ?566次閱讀
    Linux下Vim<b class='flag-5'>編輯器</b>的使用技巧

    華為發(fā)布網(wǎng)一體化網(wǎng)絡(luò)安全解決方案

    3月20日至21日,以“因聚而生 眾智有為”為主題的華為中國(guó)合作伙伴大會(huì)2025在深圳舉行。期間,華為數(shù)據(jù)通信產(chǎn)品線安全分銷領(lǐng)域總監(jiān)張峰在“華為坤靈直播間”面向中小企業(yè)發(fā)布網(wǎng)一體化
    的頭像 發(fā)表于 03-21 17:28 ?763次閱讀

    【McCharts】基于鴻蒙ArkTS語(yǔ)法開發(fā)的圖表組件--折線圖

    編輯器,可以用來(lái)自己平時(shí)做圖或者設(shè)計(jì)海報(bào)之類的。而這次我將使用鴻蒙 ArkTs 來(lái)開發(fā)這款海報(bào)編輯器
    發(fā)表于 03-15 15:27

    多省市聚焦車路一體化發(fā)展,共繪智能交通產(chǎn)業(yè)新藍(lán)圖

    多省市聚焦車路一體化發(fā)展,共繪智能交通產(chǎn)業(yè)新藍(lán)圖
    的頭像 發(fā)表于 02-18 08:49 ?557次閱讀
    多省市聚焦車路<b class='flag-5'>云</b><b class='flag-5'>一體化</b>發(fā)展,共繪智能交通產(chǎn)業(yè)新藍(lán)圖

    如祺出行入選智能網(wǎng)聯(lián)車路一體化典型案例

    在2024第三屆未來(lái)交通產(chǎn)業(yè)發(fā)展峰會(huì)上,如祺出行“車路一體化C-V2X車載終端規(guī)?;瘧?yīng)用項(xiàng)目”入選大會(huì)“智能網(wǎng)聯(lián)車路一體化典型案例”。
    的頭像 發(fā)表于 01-14 11:43 ?726次閱讀

    華為入選中國(guó)網(wǎng)安一體化能力領(lǐng)導(dǎo)者

    近日,中國(guó)數(shù)字產(chǎn)業(yè)第三方權(quán)威調(diào)研咨詢機(jī)構(gòu)數(shù)世咨詢發(fā)布了《網(wǎng)安一體化能力指南》報(bào)告(以下簡(jiǎn)稱“報(bào)告”)。報(bào)告對(duì)中國(guó)11家具備網(wǎng)安相關(guān)解決方案和產(chǎn)品的主流廠商進(jìn)行了調(diào)研,華為憑借在網(wǎng)
    的頭像 發(fā)表于 12-20 15:11 ?787次閱讀

    華礪智行亮相2024車路一體化融合發(fā)展論壇

    當(dāng)前,“車路一體化”邁入了產(chǎn)業(yè)規(guī)?;ㄔO(shè)和應(yīng)用的關(guān)鍵時(shí)期。作為支撐車路一體化建設(shè)的重要城市,上海、合肥、宜昌、武漢等城市正在大力發(fā)展新能源和智能網(wǎng)聯(lián)汽車、智慧交通等戰(zhàn)略性新興產(chǎn)業(yè),
    的頭像 發(fā)表于 12-02 17:33 ?848次閱讀

    德晟達(dá)助力解決車路一體化發(fā)展難題

    隨著智能交通的發(fā)展,車路網(wǎng)一體化成為實(shí)現(xiàn)高效、安全、環(huán)保出行的重要手段。而車路一體化的普及推廣,需要產(chǎn)業(yè)上下游伙伴緊密攜手共破產(chǎn)業(yè)難題。為了解決車路
    的頭像 發(fā)表于 11-25 18:11 ?763次閱讀

    Vivado編輯器亂碼問(wèn)題

    我們?cè)谌粘?b class='flag-5'>開發(fā)中經(jīng)常使用sublime、vim、vs code等第三方的編輯器,這些編輯器可以使用很多插件來(lái)提高我們的編碼效率,但是也往往會(huì)帶來(lái)亂碼的問(wèn)題。我般使用的是sublime
    的頭像 發(fā)表于 10-15 17:24 ?2572次閱讀
    Vivado<b class='flag-5'>編輯器</b>亂碼問(wèn)題

    中偉視界:AI邊一體化平臺(tái)的智能化全流程解析

    AI邊一體化管控平臺(tái)通過(guò)將邊緣計(jì)算與云端服務(wù)整合,實(shí)現(xiàn)了從數(shù)據(jù)采集到?jīng)Q策的全流程智能化管理,提升了效率與安全性。平臺(tái)支持多種設(shè)備的靈活集成及自動(dòng)化運(yùn)維,為企業(yè)的智能化轉(zhuǎn)型提供了強(qiáng)有力的技術(shù)支持。
    的頭像 發(fā)表于 09-19 11:41 ?679次閱讀

    vim編輯器命令模式使用方法

    Vim編輯器款功能強(qiáng)大的文本編輯器,廣泛應(yīng)用于程序員和開發(fā)者的日常工作中。Vim編輯器擁有多種模式,其中命令模式(Command mod
    的頭像 發(fā)表于 08-30 15:01 ?1056次閱讀

    vim編輯器如何使用

    Vim編輯器個(gè)功能強(qiáng)大的文本編輯器,它基于Vi進(jìn)行改進(jìn),并增加了許多新特性。Vim編輯器的使用主要涉及其不同的工作模式及相應(yīng)操作。以下是Vim
    的頭像 發(fā)表于 08-30 14:58 ?900次閱讀

    揭秘! 經(jīng)緯恒潤(rùn)“車路一體化”方案研發(fā)服務(wù)背后的科技驅(qū)動(dòng)力

    汽車“車路一體化”正迎來(lái)新輪的發(fā)展高潮。經(jīng)緯恒潤(rùn)基于在港口領(lǐng)域多年的研發(fā)與運(yùn)營(yíng)經(jīng)驗(yàn),打造了智能網(wǎng)聯(lián)汽車“車路
    的頭像 發(fā)表于 08-13 08:00 ?1430次閱讀
    揭秘! 經(jīng)緯恒潤(rùn)“車路<b class='flag-5'>云</b><b class='flag-5'>一體化</b>”方案研發(fā)服務(wù)背后的科技驅(qū)動(dòng)力

    一體化物聯(lián)網(wǎng)平臺(tái)如何實(shí)現(xiàn)?有什么功能

    一體化物聯(lián)網(wǎng)平臺(tái)(CloudEdge Integration IoT Platform)是種結(jié)合了計(jì)算和邊緣計(jì)算優(yōu)勢(shì)的物聯(lián)網(wǎng)解決方案。它通過(guò)在云端和邊緣
    的頭像 發(fā)表于 07-29 14:34 ?812次閱讀