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

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

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

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

基于ArkUI request API實(shí)現(xiàn)下載進(jìn)度獲取及顯示

OpenHarmony技術(shù)社區(qū) ? 來(lái)源:OST開源開發(fā)者 ? 2023-04-04 16:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文基于 ArkUI request API 實(shí)現(xiàn)下載進(jìn)度獲取及顯示。

鴻蒙應(yīng)用開發(fā)中,我們常用兩種方式來(lái)實(shí)現(xiàn)文件的下載:

使用系統(tǒng)能力:

SystemCapability.Communication.NetStack(@ohos.http)
使用系統(tǒng)能力:
SystemCapability.MiscServices.Download(@ohos.request)
區(qū)別如下:前者下載過(guò)程信息不可見,后者會(huì)在手機(jī)狀態(tài)欄顯示下載會(huì)話,并且可被應(yīng)用監(jiān)聽;前者請(qǐng)求下載后不會(huì)對(duì)文件作進(jìn)一步處理,后者會(huì)直接保存到指定目錄。

使用場(chǎng)景如下:

下載大體積文件時(shí)監(jiān)聽進(jìn)度

文件下載直接到本地保存

文檔傳送門:

https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-request-0000001333800457

https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/apis/js-apis-request.md/
下面,我們基于 ArkUI-ts 來(lái)實(shí)現(xiàn)一個(gè)下載進(jìn)度條的顯示,以 API 8、FA 模型為例。

API 9 接口稍有改動(dòng),若使用 API 9、Stage 模型,請(qǐng)參考官方文檔OpenHarmony,但基本的代碼思路是不變的。

https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/apis/js-apis-request.md/
變動(dòng):相比于 API 8 的 FA 模型,加入了 Context 的傳參;增加了uploadFile()、downloadFile() 方法,保留 upload()、donwload() 方法。

實(shí)現(xiàn)流程

首先配置網(wǎng)絡(luò)權(quán)限(config.json–>module 下添加):

"reqPermissions":[
{
"name":"ohos.permission.INTERNET"
}
],

支持 http(config.json 下添加):

"deviceConfig":{
"default":{
"network":{
"cleartextTraffic":true
}
}
},

①下載配置

導(dǎo)入系統(tǒng)接口:

importrequestfrom'@ohos.request'
DownloadConfig

常用的字段配置:

2eedbac0-d12a-11ed-bfe3-dac502259ad0.png

其它的字段配置:

2f01fd5a-d12a-11ed-bfe3-dac502259ad0.png

示例 1:例如通過(guò)圖片 url 下載保存到本地的 internal://cache 的 myDownload/test.png 路徑,文件名為 test.png。

letdownloadConfig:request.DownloadConfig={
url:downloadUrl,
filePath:'myDownload/test.png',
description:'DownloadTest',
}

internal://cache 是應(yīng)用沙箱路徑,獲取方法:

importfeatureAbilityfrom"@ohos.ability.featureAbility"
letcacheSandPath=featureAbility.getConext().getCacheDoir()
目前 js api 只支持在 filePath 配置在 internal://cache 下(默認(rèn))。 我們有兩種方式可以訪問(wèn)到下載的文件:一是內(nèi)部?jī)?chǔ)存目錄 storage 路徑 file 目錄;二是只允許本應(yīng)用訪問(wèn)的沙箱路徑 cache 目錄。 這個(gè)知識(shí)點(diǎn)在后面的 Image 顯示會(huì)用到。

②創(chuàng)建下載任務(wù)

letdownloadTask
request.download(downloadConfig,(err,data)=>{
if(err){
console.info('xxx---Failedtorequestthedownload.Cause:'+JSON.stringify(err))
return
}
downloadTask=data
})

③監(jiān)聽下載事件

request.DownloadTask:

2f1c4502-d12a-11ed-bfe3-dac502259ad0.png

request.DownloadInfo:

2f4e439a-d12a-11ed-bfe3-dac502259ad0.png

想要實(shí)現(xiàn)下載進(jìn)度的監(jiān)聽,從上面的方法我們可以找到對(duì)應(yīng)的方法 on(“progress”)。

示例 3-1

downloadTask.on('progress',(receiveSize:number,totalSize:number)=>{
this.curProgressValue=(receiveSize/totalSize)*100
this.curTaskDownloadedSize=receiveSize
this.curTaskTotalSize=totalSize
})
經(jīng)過(guò)測(cè)試發(fā)現(xiàn),直接使用 on(‘progress’) 不一定能監(jiān)聽到實(shí)時(shí)下載大小和總大小,返回值 receivedSize 和 totalSize 可能為 0。 因此當(dāng) on(“progress”) 的返回值為 0 時(shí),我們可以用另外一個(gè)方法 query() 來(lái)查詢實(shí)時(shí)下載中的進(jìn)度信息,或是在 query() 中使用 on(‘progress’)。 示例 3-2

進(jìn)度的監(jiān)聽:

letdownloadInfoFilePath:string=''
downloadTask.query().then((downloadInfo:request.DownloadInfo)=>{
downloadInfoFilePath=downloadInfo.filePath//此處返回的路徑不同于應(yīng)用沙箱路徑
this.downloadTask=data
this.downloadTask.on('progress',(receiveSize:number,totalSize:number)=>{
this.curProgressValue=(receiveSize/totalSize)*100//進(jìn)度條Progress屬性值
this.curTaskDownloadedSize=receiveSize//實(shí)時(shí)下載大小
this.curTaskTotalSize=totalSize//總大小
})
/*或使用query返回的downloadInfo獲取下載進(jìn)度信息
this.curTaskDownloadedSize=downloadInfo.downloadedBytes
this.curTaskTotalSize=downloadInfo.downloadTotalBytes
this.curProgressValue=(this.curTaskDownloadedSize/this.curTaskTotalSize)*100
*/
console.info('xxx---downloadTaskqueriedinfo:'+JSON.stringify(downloadInfo))
}).catch((err)=>{
console.info('xxx---FailedtoquerythedownloadTask:'+JSON.stringify(err))
})
示例 3-3

complete、fail、pause 事件的監(jiān)聽:

downloadTask.query().then((downloadInfo:request.DownloadInfo)=>{
......
varself=this
varclearListeners=function(){
self.downloadTask.off('progress')
self.downloadTask.off('fail')
self.downloadTask.off('remove')
self.downloadTask.off('complete')
}
this.downloadTask.on('fail',(err)=>{
clearListeners()
this.curProgressValue=0
})
this.downloadTask.on('remove',()=>{
clearListeners()
this.curProgressValue=0
})
this.downloadTask.on('complete',()=>{
clearListeners()
this.curProgressValue=100
//downloadInfoList:string[]保存下載歷史的路徑
this.downloadInfoList.push(downloadInfoFilePath)
})
})

④下載結(jié)果反饋

定義一個(gè) Progress 組件來(lái)顯示當(dāng)前下載任務(wù)的進(jìn)度(數(shù)字和進(jìn)度條),當(dāng)下載任務(wù)結(jié)束后,顯示相關(guān)信息:任務(wù)成功 or 失敗、保存的位置。

Progress({value:this.curProgressValue})
.width('90%')
.color(Color.Blue)
.margin(10)

Text 顯示相關(guān)下載信息:

Text('實(shí)時(shí)下載大小:'+this.curTaskDownloadedSize+'B').width('90%').fontSize(25).margin(10)
Text('當(dāng)前任務(wù)大小:'+this.curTaskTotalSize+'B').width('90%').fontSize(25).margin(10)
Text('下載儲(chǔ)存路徑:').width('90%').fontSize(25).margin({left:10,right:10,top:10,bottom:5})

定義 Image 組件,獲取保存路徑顯示下載的媒體(僅當(dāng)圖片)。

這里訪問(wèn)路徑使用的是 downloadInfo 中的 filePath 屬性,即內(nèi)部?jī)?chǔ)存路徑。

//downloadInfoList:string[]保存下載歷史的路徑
ForEach(this.downloadInfoList,item=>{
Flex({justifyContent:FlexAlign.Center}){
Image(item)
.backgroundColor('#ccc')
.margin(5)
.width('25%')
.aspectRatio(1)
.alignSelf(ItemAlign.Start)
.objectFit(ImageFit.ScaleDown)
Text(item).fontSize(15).padding(10).width('70%')
}.width('95%')
},item=>item)

同時(shí),可以完美地運(yùn)用上我此前封裝好的文件管理器組件-FilerBall,來(lái)檢驗(yàn)我們文件下載保存的位置,以及查看更詳細(xì)的文件信息。

演示圖:

2f67fb8c-d12a-11ed-bfe3-dac502259ad0.jpg

借助FilerBall組件檢驗(yàn):

2f8f9a52-d12a-11ed-bfe3-dac502259ad0.jpg 這里設(shè)置 images、video、file 都保存在沙箱訪問(wèn)路徑 internal://cache 的 myDownload/ 下。 Image 回顯: 2f988a5e-d12a-11ed-bfe3-dac502259ad0.png

代碼如下:

downloadDemo(downloadUrl:string,saveUrl?:string){
varself=this
varclearListeners=function(){
self.downloadTask.off('progress')
self.downloadTask.off('fail')
self.downloadTask.off('remove')
self.downloadTask.off('complete')
}
letdownloadConfig:request.DownloadConfig={
url:downloadUrl,
filePath:'myDownload/'+saveUrl,
enableMetered:true,
enableRoaming:true,
description:'DownloadTest',
}
request.download(downloadConfig,(err,data)=>{
if(err){
console.info('xxx---Failedtorequestthedownload.Cause:'+JSON.stringify(err))
return
}
letdownloadInfoFilePath
this.curProgressValue=0
this.mes='開始'
this.downloadTask=data
this.downloadTask.query().then((downloadInfo:request.DownloadInfo)=>{
downloadInfoFilePath=downloadInfo.filePath
this.downloadTask.on('progress',(receiveSize:number,totalSize:number)=>{
this.curProgressValue=(receiveSize/totalSize)*100
this.curTaskDownloadedSize=receiveSize
this.curTaskTotalSize=totalSize
})
console.info('xxx---Downloadtaskqueried.Data:'+JSON.stringify(downloadInfo))
}).catch((err)=>{
console.info('xxx---Failedtoquerythedownloadtask.Cause:'+JSON.stringify(err))
})

this.downloadTask.on('fail',(err)=>{
clearListeners()
this.curProgressValue=0
this.mes='失敗'
})
this.downloadTask.on('remove',()=>{
clearListeners()
this.curProgressValue=0
this.mes='取消'
})
this.downloadTask.on('complete',()=>{
clearListeners()
this.curProgressValue=100
this.mes='完成'
//downloadInfoList保存下載歷史的路徑
this.downloadInfoList.push(downloadInfoFilePath)
})
})
}

ets 使用示例:

Button('下載視頻(小)',{type:ButtonType.Capsule})
.width('90%')
.height(50)
.margin(10)
.onClick(()=>{
this.curProgressValue=this.curTaskDownloadedSize=this.curTaskTotalSize=0
this.downloadDemo('https://media.w3.org/2010/05/sintel/trailer.mp4','video/')
})
頁(yè)面代碼放在附件資源,請(qǐng)點(diǎn)擊閱讀原文查看。

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    2481

    瀏覽量

    67060
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    598

    瀏覽量

    26122
  • 應(yīng)用開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    9995
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    3031

    瀏覽量

    46192
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3977

    瀏覽量

    21377

原文標(biāo)題:鴻蒙上實(shí)現(xiàn)一個(gè)“下載進(jìn)度條”

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    請(qǐng)問(wèn)esp32 ota升級(jí)如何獲取更新進(jìn)度?

    所用的是esp32-s2 idf:4.4調(diào)用esp_https_ota API進(jìn)行固件升級(jí),想獲取更新進(jìn)度,但不知道怎么實(shí)現(xiàn),有人做過(guò)或者有思路指點(diǎn)一下嗎?
    發(fā)表于 06-14 07:20

    ArkUI-X平臺(tái)橋接Bridge說(shuō)明

    。 使用場(chǎng)景及能力 使用場(chǎng)景 平臺(tái)橋接主要用于這樣的場(chǎng)景:應(yīng)用需要復(fù)用平臺(tái)的代碼,而在OpenHarmony中沒有對(duì)應(yīng)的跨平臺(tái)API(不包括UI相關(guān))實(shí)現(xiàn)。 具體可用于以下場(chǎng)景: 1、ArkUI與平臺(tái)雙向
    發(fā)表于 06-19 23:12

    【HarmonyOS next】ArkUI-X休閑娛樂搞笑日歷【基礎(chǔ)】

    、iPhone 13 Pro 開發(fā)語(yǔ)言:ArkTS 框架版本:ArkUI API 16 關(guān)鍵技術(shù)實(shí)現(xiàn) 1. 網(wǎng)絡(luò)圖片獲取與解析 通過(guò)@kit.NetworkKit發(fā)起GET請(qǐng)求,解析
    發(fā)表于 06-28 22:07

    怎么用labview實(shí)現(xiàn)下載程序的進(jìn)度

    怎么用labview實(shí)現(xiàn)下載程序的進(jìn)度
    發(fā)表于 01-12 21:43

    labview 如何實(shí)現(xiàn)復(fù)制文件的同時(shí)獲取復(fù)制進(jìn)度

    如何實(shí)現(xiàn)復(fù)制文件的同時(shí)獲取復(fù)制進(jìn)度哪位大俠實(shí)現(xiàn)了,麻煩指點(diǎn)下,謝謝!
    發(fā)表于 12-27 15:12

    iOS開發(fā)ASIHTTPRequest進(jìn)度追蹤的內(nèi)容介紹

    本文為大家介紹了發(fā)ASIHTTPRequest進(jìn)度追蹤的內(nèi)容,其中包括追蹤單個(gè)request下載進(jìn)度,追蹤一系列request
    發(fā)表于 07-15 07:06

    求助,esp32 ota升級(jí)如何獲取更新進(jìn)度?

    所用的是esp32-s2idf:4.4調(diào)用esp_https_ota API進(jìn)行固件升級(jí),想獲取更新進(jìn)度,但不知道怎么實(shí)現(xiàn),有人做過(guò)或者有思路指點(diǎn)一下嗎?
    發(fā)表于 02-14 07:15

    鴻蒙上安裝按鈕實(shí)現(xiàn)下載、暫停、取消、顯示等操作

    今天給大家分享在鴻蒙上一個(gè)按鈕實(shí)現(xiàn)下載、暫停、取消、顯示下載進(jìn)度操作。
    的頭像 發(fā)表于 01-04 14:32 ?3278次閱讀

    如何獲取 OpenAI API Key?API 獲取與代碼調(diào)用示例 (詳解教程)

    OpenAI API Key 獲取與使用詳解:從入門到精通 OpenAI 正以其 GPT 和 DALL-E 等先進(jìn)模型引領(lǐng)全球人工智能創(chuàng)新。其 API 為開發(fā)者和企業(yè)提供了強(qiáng)大的 AI 能力集成途徑
    的頭像 發(fā)表于 05-04 11:42 ?2w次閱讀
    如何<b class='flag-5'>獲取</b> OpenAI <b class='flag-5'>API</b> Key?<b class='flag-5'>API</b> <b class='flag-5'>獲取</b>與代碼調(diào)用示例 (詳解教程)

    【HarmonyOS 5】鴻蒙中進(jìn)度條的使用詳解

    的形式展示進(jìn)度。從API version 9開始,當(dāng)組件高度大于寬度時(shí),它會(huì)自適應(yīng)垂直顯示;當(dāng)高度和寬度相等時(shí),保持水平顯
    的頭像 發(fā)表于 07-11 18:26 ?1318次閱讀
    【HarmonyOS 5】鴻蒙中<b class='flag-5'>進(jìn)度</b>條的使用詳解

    產(chǎn)品列表獲取API接口詳解

    ? 在現(xiàn)代軟件開發(fā)中,API(應(yīng)用程序編程接口)是獲取產(chǎn)品列表的核心工具,它允許開發(fā)者從遠(yuǎn)程服務(wù)器高效地檢索數(shù)據(jù)。本文將逐步介紹如何設(shè)計(jì)和使用產(chǎn)品列表獲取API接口,包括核心概念、
    的頭像 發(fā)表于 07-24 14:29 ?921次閱讀
    產(chǎn)品列表<b class='flag-5'>獲取</b><b class='flag-5'>API</b>接口詳解

    產(chǎn)品評(píng)論獲取API接口

    、實(shí)現(xiàn)步驟和實(shí)用示例。 什么是產(chǎn)品評(píng)論API接口? API(應(yīng)用程序編程接口)是軟件系統(tǒng)間交互的橋梁。產(chǎn)品評(píng)論API允許開發(fā)者通過(guò)標(biāo)準(zhǔn)請(qǐng)求,從電商平臺(tái)(如Amazon、淘寶或自建系統(tǒng))
    的頭像 發(fā)表于 07-25 14:26 ?669次閱讀
    產(chǎn)品評(píng)論<b class='flag-5'>獲取</b><b class='flag-5'>API</b>接口

    如何通過(guò)API獲取1688平臺(tái)商品詳情

    獲取商品詳情,包括API概述、訪問(wèn)方法、請(qǐng)求示例和代碼實(shí)現(xiàn)。 1. API概述 1688平臺(tái)提供了一系列開放API接口,允許開發(fā)者
    的頭像 發(fā)表于 11-11 14:00 ?1396次閱讀
    如何通過(guò)<b class='flag-5'>API</b><b class='flag-5'>獲取</b>1688平臺(tái)商品詳情

    ???????使用 DMM Web API 獲取搜索列表數(shù)據(jù)

    ? ?DMM 平臺(tái)提供了豐富的 Web API 接口,允許開發(fā)者獲取其平臺(tái)上的各種數(shù)據(jù)。其中一個(gè)常用的接口是用于獲取搜索列表結(jié)果的 API。本文將介紹如何調(diào)用此
    的頭像 發(fā)表于 02-09 15:34 ?400次閱讀
    ???????使用 DMM Web <b class='flag-5'>API</b> <b class='flag-5'>獲取</b>搜索列表數(shù)據(jù)

    獲取Ozon商品詳情數(shù)據(jù)的API接口技術(shù)指南

    準(zhǔn)備工作、接口調(diào)用、代碼實(shí)現(xiàn)及注意事項(xiàng)。文章基于通用API實(shí)踐,確保內(nèi)容真實(shí)可靠。 1. 準(zhǔn)備工作 在調(diào)用API前,您需要完成以下準(zhǔn)備工作: 注冊(cè)開發(fā)者賬號(hào) :訪問(wèn)Ozon開發(fā)者平臺(tái)(例如,https://
    的頭像 發(fā)表于 02-28 16:28 ?1009次閱讀
    <b class='flag-5'>獲取</b>Ozon商品詳情數(shù)據(jù)的<b class='flag-5'>API</b>接口技術(shù)指南
    西城区| 鹤壁市| 桃园县| 镇巴县| 酒泉市| 宜都市| 巩义市| 洮南市| 高平市| 南靖县| 柳林县| 东台市| 锡林浩特市| 黄平县| 松阳县| 洪雅县| 白水县| 漠河县| 沙坪坝区| 自治县| 南部县| 四平市| 安义县| 秦安县| 彭阳县| 阿合奇县| 简阳市| 桑日县| 常熟市| 沭阳县| 仲巴县| 德钦县| 辉县市| 英超| 泸西县| 忻城县| 松江区| 定安县| 广南县| 赣榆县| 景东|