日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

前言

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

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

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

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

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

整體開發(fā)流程

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

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

端云一體化工程講解

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

image.png

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

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

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

創(chuàng)建表與方法

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

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

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

image.png

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

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

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

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

image.png

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

ts文件里面默認有一個主入口方法:

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)用方傳遞的事件對象,JSON格式。具體內(nèi)容請參見event對象。
  • context:函數(shù)運行時上下文對象,封裝了日志接口、回調(diào)接口、環(huán)境變量env對象等。
  • callback:事件處理結(jié)果。
  • logger:記錄日志。

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

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

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

1. 云數(shù)據(jù)庫注冊認證

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

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ā)者平臺下載對應(yīng)的js配置文件,放在對應(yīng)的函數(shù)目錄根目錄下

// 加載憑證文件,憑證文件也是在開發(fā)者平臺下載,具體看我的截圖
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 下載加載對象類型文件
image.png
1.2 將上面下載的文件引入到云函數(shù)目錄中
image.png
1.3 下載憑證文件
image.png

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

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

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

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

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

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

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

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

  //表名稱也是通過開發(fā)者平臺獲取即可,字符串模式
  const bookInfo = clouddb.CloudDBZoneGenericObject.build('表名稱')
  // 添加屬性對應(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ù)庫-更新數(shù)據(jù)

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

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

let myHandler = async function (event, context, callback, logger) {
  // 獲取你的參數(shù)
  const body = event.body ? JSON.parse(event.body) : event
  
  // 引入表實例
  const bookInfo = new db_demo.db_demo();
  // 定位唯一鍵,目的找到對應(yīng)的數(shù)據(jù)
  bookInfo.setId('主鍵數(shù)據(jù)值') // 主鍵字段,自己在創(chuàng)建數(shù)據(jù)庫的時候需要自定義主鍵
  // 注冊
  const operator = clouddb.CloudDBZoneObjectOperator.build(bookInfo)
  operator.update('字段名稱1', 數(shù)據(jù)) // 更新對應(yīng)字段數(shù)據(jù)
  operator.update('字段名稱2', 數(shù)據(jù)) // 更新對應(yīng)字段數(shù)據(jù)
  operator.update('字段名稱3', 數(shù)據(jù)) // 更新對應(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ù)庫-查詢數(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')
// 上面是注冊、加載憑證、打開存儲區(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] // 獲取對應(yīng)數(shù)據(jù)
  callback({
      code: 200,
      data: [],
      msg: '提示內(nèi)容'
  });
};

export { myHandler };

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

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

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

1. 云存儲注冊認證

在使用云存儲的所有方法時,也是都需要先注冊認證哈

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: 存儲實例名稱,獲取方式從開發(fā)者平臺獲取
let bucket = storage.bucket('xxxx');

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

export { myHandler };

1.1 獲取存儲實例名稱

image.png

2. 使用云存儲的方法

2.1 上傳文件

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

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

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

export { myHandler };

2.2 下載文件

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

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

export { myHandler };

總結(jié)

這次的鴻蒙端云一體化的開發(fā)經(jīng)驗就講解到這里,可能我講的不是很細,因為也是第一次使用,希望可以幫助大家。如果上面描述的有問題,歡迎大家在評論區(qū)指出來,謝謝。后面我們也會分享端側(cè)的開發(fā)經(jīng)驗,以及會將對應(yīng)app上線,到時候有相關(guān)技術(shù)討論的都可以找我們

審核編輯 黃宇

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

    關(guān)注

    60

    文章

    3031

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    什么是安消一體化物聯(lián)網(wǎng)系統(tǒng)平臺--安防消防一體化物聯(lián)網(wǎng)系統(tǒng)平臺簡稱安消一體化平臺

    安防消防一體化系統(tǒng)、大型場館消防安防一體化系統(tǒng)平臺、大型場館消防安防指揮中心一體化系統(tǒng)平臺、工廠消防安防一體化系統(tǒng)平臺
    的頭像 發(fā)表于 04-14 08:59 ?551次閱讀

    光儲充一體化電站微電網(wǎng)系統(tǒng)建設(shè)的應(yīng)用方案

    摘要: 光儲充一體化電站作為新能源領(lǐng)域的創(chuàng)新模式,集成了太陽能發(fā)電和能量存儲系統(tǒng),旨在提高能源利用效率和響應(yīng)能源需求的靈活性。這種模式對傳統(tǒng)的能源供應(yīng)和管理模式提出了挑戰(zhàn),同時也為能源行業(yè)的發(fā)展
    發(fā)表于 04-10 15:49

    中科創(chuàng)達攜手亞馬遜科技推出一體化邊緣AI解決方案

    作為全球領(lǐng)先的智能操作系統(tǒng)和側(cè)智能技術(shù)提供商,中科創(chuàng)達始終致力于通過技術(shù)創(chuàng)新賦能產(chǎn)業(yè)升級。2026年1月8日, 中科創(chuàng)達(ThunderSoft)在拉斯維加斯CES現(xiàn)場發(fā)表演講,并攜手亞馬遜科技聯(lián)合發(fā)布
    的頭像 發(fā)表于 01-14 10:00 ?2289次閱讀

    廣汽集團參與車路一體化中外車企協(xié)同開發(fā)測試

    10月16-18日,2025世界智能網(wǎng)聯(lián)汽車大會在北京舉行。大會期間,由國家智能網(wǎng)聯(lián)汽車創(chuàng)新中心主辦的“車路一體化中外車企協(xié)同開發(fā)測試行動量產(chǎn)應(yīng)用場景動態(tài)演示及試乘體驗活動”在北京亦莊成功舉辦
    的頭像 發(fā)表于 10-21 17:10 ?1407次閱讀

    飛凌嵌入式ElfBoard-常用編輯器之Vim編輯器

    環(huán)境做開發(fā),有windows界面軟件使用習(xí)慣的程序員不怎么友好,所以,也可以使用gedit文本編輯器,gedit類似windows的寫字板程序,有友好的圖形界面。對于不經(jīng)常在Linux做開發(fā)的程序員
    發(fā)表于 10-13 08:47

    一體化ROS智能駕駛小車及實訓(xùn)教學(xué)平臺解決方案

    一體化ROS智能駕駛小車及實訓(xùn)教學(xué)平臺解決方案
    的頭像 發(fā)表于 09-26 17:34 ?1911次閱讀
    <b class='flag-5'>一體化</b>ROS智能駕駛小車及實訓(xùn)教學(xué)平臺解決方案

    潤和軟件發(fā)布基于開源歐拉的一體化智能物聯(lián)解決方案

    9月18日至20日,以“躍升行業(yè)智能化”為主題的華為全聯(lián)接大會2025于上海盛大舉辦。江蘇潤和軟件股份有限公司(以下簡稱“潤和軟件”)作為面向行業(yè)的專業(yè)數(shù)智科技服務(wù)商,在大會同期重磅發(fā)布了基于開源歐拉的“-邊-一體化智能物聯(lián)
    的頭像 發(fā)表于 09-22 14:08 ?1810次閱讀
    潤和軟件發(fā)布基于開源歐拉的<b class='flag-5'>云</b>邊<b class='flag-5'>端</b><b class='flag-5'>一體化</b>智能物聯(lián)解決方案

    解決方案 | 一體化OTA HIL測試解決方案

    TOSUN一體化OTAHIL測試解決方案隨著智能網(wǎng)聯(lián)汽車的快速發(fā)展,OTA(Over-the-Air)技術(shù)已成為車輛軟件升級的核心手段。為滿足日益嚴格的法規(guī)要求和技術(shù)挑戰(zhàn),同星智能(TOSUN
    的頭像 發(fā)表于 09-19 20:03 ?2001次閱讀
    解決方案 | <b class='flag-5'>云</b>管<b class='flag-5'>端</b><b class='flag-5'>一體化</b>OTA HIL測試解決方案

    GAITC2025|張科:一體大模型推理應(yīng)用實戰(zhàn)

    出席并在《行業(yè)大模型應(yīng)用與發(fā)展》論壇發(fā)表演講,首次深入介紹京東零售在一體大模型推理架構(gòu)的實戰(zhàn)經(jīng)驗與技術(shù)探索,并分享AI推理方向的未來發(fā)展思考。 以下為張科分享實錄,內(nèi)容經(jīng)
    的頭像 發(fā)表于 06-26 09:33 ?732次閱讀

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

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

    零碳園區(qū)建設(shè)的突破之路:安科瑞 “一體化解決方案

    零碳園區(qū)建設(shè)的突破之路:安科瑞 “一體化解決方案 中國園區(qū)工業(yè)總產(chǎn)值占全國 50%,碳排放量達 31%,零碳轉(zhuǎn)型成為 “雙碳” 目標的關(guān)鍵抓手。盡管 20 余省份已出臺支持政策,但園區(qū)在碳
    的頭像 發(fā)表于 06-19 16:11 ?772次閱讀
    零碳園區(qū)建設(shè)的突破之路:安科瑞 “<b class='flag-5'>云</b>邊<b class='flag-5'>端</b>” <b class='flag-5'>一體化</b>解決方案

    曠視科技與舟智維合作打造裝備維修智能一體化平臺

    近日,曠視科技與舟智維攜手合作,共同打造裝備維修智能一體化平臺,這是全球首個大型裝備智慧維保智能,也是多模態(tài)技術(shù)加持傳統(tǒng)行業(yè)的重要里程碑。
    的頭像 發(fā)表于 06-17 17:14 ?1393次閱讀
    曠視科技與<b class='flag-5'>云</b>舟智維合作打造裝備維修智能<b class='flag-5'>一體化</b>平臺

    EGBox:一體化工業(yè)級實時仿真旗艦平臺,全功能覆蓋

    隨著電力電子、新能源等領(lǐng)域的快速發(fā)展,復(fù)雜系統(tǒng)仿真需求日益增長。EasyGo半實物仿真事業(yè)部深耕行業(yè)需求,推出基于CPU+FPGA異構(gòu)架構(gòu)的一體化工業(yè)級實時仿真——EGBox,以模塊化、易開發(fā)
    的頭像 發(fā)表于 05-27 12:00 ?912次閱讀
    EGBox:<b class='flag-5'>一體化</b>工業(yè)級實時仿真旗艦平臺,全功能覆蓋

    HarmonyOS5服務(wù)技術(shù)分享--函數(shù)預(yù)加載文章整理

    = processRequest(event, configCache); callback(result); } ??結(jié)語:讓函數(shù)為你的應(yīng)用插上翅膀?? 通過一體化開發(fā),
    發(fā)表于 05-22 20:33

    Vim編輯器的基本操作

    在代碼的世界里,效率是永恒的追求。無論是新手開發(fā)者還是資深工程師,都渴望擁有款能讓自己如虎添翼的編輯器。而在Linux生態(tài)中,有款被無數(shù)程序員奉為神器、被譽為“效率之王”的
    的頭像 發(fā)表于 05-06 13:41 ?1474次閱讀
    Vim<b class='flag-5'>編輯器</b>的基本操作
    南乐县| 浦县| 休宁县| 岳阳县| 临清市| 页游| 双桥区| 寿阳县| 墨竹工卡县| 鲁甸县| 昌宁县| 天门市| 三都| 邯郸县| 齐河县| 丰县| 当涂县| 琼中| 临猗县| 宝坻区| 大安市| 宿迁市| 宁安市| 衡南县| 文登市| 柯坪县| 蒙自县| 龙山县| 林周县| 清丰县| 江山市| 固镇县| 香港 | 咸宁市| 麻栗坡县| 华阴市| 吉水县| 大田县| 彰武县| 台南县| 十堰市|