色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

基于ArkUI request API實現下載進度獲取及顯示

OpenHarmony技術社區 ? 來源:OST開源開發者 ? 2023-04-04 16:53 ? 次閱讀

本文基于 ArkUI request API 實現下載進度獲取及顯示。

鴻蒙應用開發中,我們常用兩種方式來實現文件的下載:

使用系統能力:

SystemCapability.Communication.NetStack(@ohos.http)
使用系統能力:
SystemCapability.MiscServices.Download(@ohos.request)
區別如下:前者下載過程信息不可見,后者會在手機狀態欄顯示下載會話,并且可被應用監聽;前者請求下載后不會對文件作進一步處理,后者會直接保存到指定目錄。

使用場景如下:

下載大體積文件時監聽進度

文件下載直接到本地保存

文檔傳送門:

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 來實現一個下載進度條的顯示,以 API 8、FA 模型為例。

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

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

實現流程

首先配置網絡權限(config.json–>module 下添加):

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

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

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

①下載配置

導入系統接口:

importrequestfrom'@ohos.request'
DownloadConfig

常用的字段配置:

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

其它的字段配置:

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

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

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

internal://cache 是應用沙箱路徑,獲取方法:

importfeatureAbilityfrom"@ohos.ability.featureAbility"
letcacheSandPath=featureAbility.getConext().getCacheDoir()
目前 js api 只支持在 filePath 配置在 internal://cache 下(默認)。 我們有兩種方式可以訪問到下載的文件:一是內部儲存目錄 storage 路徑 file 目錄;二是只允許本應用訪問的沙箱路徑 cache 目錄。 這個知識點在后面的 Image 顯示會用到。

②創建下載任務

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

③監聽下載事件

request.DownloadTask:

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

request.DownloadInfo:

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

想要實現下載進度的監聽,從上面的方法我們可以找到對應的方法 on(“progress”)。

示例 3-1

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

進度的監聽:

letdownloadInfoFilePath:string=''
downloadTask.query().then((downloadInfo:request.DownloadInfo)=>{
downloadInfoFilePath=downloadInfo.filePath//此處返回的路徑不同于應用沙箱路徑
this.downloadTask=data
this.downloadTask.on('progress',(receiveSize:number,totalSize:number)=>{
this.curProgressValue=(receiveSize/totalSize)*100//進度條Progress屬性值
this.curTaskDownloadedSize=receiveSize//實時下載大小
this.curTaskTotalSize=totalSize//總大小
})
/*或使用query返回的downloadInfo獲取下載進度信息
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 事件的監聽:

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)
})
})

④下載結果反饋

定義一個 Progress 組件來顯示當前下載任務的進度(數字和進度條),當下載任務結束后,顯示相關信息:任務成功 or 失敗、保存的位置。

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

Text 顯示相關下載信息:

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

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

這里訪問路徑使用的是 downloadInfo 中的 filePath 屬性,即內部儲存路徑。

//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)

同時,可以完美地運用上我此前封裝好的文件管理器組件-FilerBall,來檢驗我們文件下載保存的位置,以及查看更詳細的文件信息。

演示圖:

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

借助FilerBall組件檢驗:

2f8f9a52-d12a-11ed-bfe3-dac502259ad0.jpg 這里設置 images、video、file 都保存在沙箱訪問路徑 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/')
})
頁面代碼放在附件資源,請點擊閱讀原文查看。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • API
    API
    +關注

    關注

    2

    文章

    1504

    瀏覽量

    62157
  • 文件
    +關注

    關注

    1

    文章

    568

    瀏覽量

    24768
  • 應用開發
    +關注

    關注

    0

    文章

    59

    瀏覽量

    9385
  • 鴻蒙
    +關注

    關注

    57

    文章

    2368

    瀏覽量

    42899
  • OpenHarmony
    +關注

    關注

    25

    文章

    3727

    瀏覽量

    16390

原文標題:鴻蒙上實現一個“下載進度條”

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    鴻蒙ArkUI-X跨語言調用說明:【平臺橋接開發指南(Android)BridgePlugin】

    本模塊提供ArkUI端和Android平臺端消息通信的功能,包括數據傳輸、方法調用和事件調用。需配套ArkUIAPI使用,ArkUI側具體用法請參考[Bridge
    的頭像 發表于 05-22 14:52 ?1193次閱讀
    鴻蒙<b class='flag-5'>ArkUI</b>-X跨語言調用說明:【平臺橋接開發指南(Android)BridgePlugin】

    請問esp32 ota升級如何獲取更新進度?

    所用的是esp32-s2 idf:4.4調用esp_https_ota API進行固件升級,想獲取更新進度,但不知道怎么實現,有人做過或者有思路指點一下嗎?
    發表于 06-14 07:20

    怎么用labview實現下載程序的進度

    怎么用labview實現下載程序的進度
    發表于 01-12 21:43

    labview 如何實現復制文件的同時獲取復制進度

    如何實現復制文件的同時獲取復制進度哪位大俠實現了,麻煩指點下,謝謝!
    發表于 12-27 15:12

    iOS開發ASIHTTPRequest進度追蹤的內容介紹

    本文為大家介紹了發ASIHTTPRequest進度追蹤的內容,其中包括追蹤單個request下載進度,追蹤一系列request
    發表于 07-15 07:06

    單片機用USB實現下載的原理

      最近研究凌陽的61單片機,可苦于61板是用并口實現下載,在線調試。可本人用的是本子并沒有并口,每次都找臺機下載是件非常的不方便。  于是在網上找了下凌陽單片機用USB實現下載的原理,可網上資料
    發表于 12-02 06:35

    HarmonyOS-API7相對API6差異主要變更內容

    能力。新增一系列公共基礎庫的接口,提供Parcel、URL、編解碼庫的能力。新增其他能力的接口,包括:上傳下載進度獲取、定時服務、fileIO基礎庫、電池狀態、背光亮度、分布式設備列表獲取
    發表于 02-15 14:35

    OpenHarmony如何獲取到單個文件復制時的進度

    1G,每次我們都只讀取1M長度的數據流,那么我們每次都只寫入這1M長度的數據流,我們就需要循環寫入1024次,在此期間不停的獲取此時新文件的大小與被復制文件的大小的比例,這樣一來,進度的數據就實現
    發表于 03-29 10:33

    4天帶你上手HarmonyOS ArkUI開發

    代碼即可實現界面功能。ArkUI內置了豐富而精美的HarmonyOS Design的UI組件和API,可滿足大部分跨端應用界面開發的所需。參與任務1、點擊閱讀原文鏈接,即刻報名訓練營,學習如何用
    發表于 09-09 14:44

    求助,esp32 ota升級如何獲取更新進度?

    所用的是esp32-s2idf:4.4調用esp_https_ota API進行固件升級,想獲取更新進度,但不知道怎么實現,有人做過或者有思路指點一下嗎?
    發表于 02-14 07:15

    OpenHarmony使用ArkUI Inspector分析布局

    DevEco Studio 4.0 Beta2版本開始集成ArkUI Inspector工具,可以從部分下載DevEco Studio 4.0 Beta2版本。 使用場景 開發者可以使用ArkUI
    發表于 09-04 15:27

    Linux基礎教程之linux wget下載進度條變成多行顯示如何解決

    在之前為了 解決Putty客戶端連接到CentOS之后顯示亂碼 的問題,設置了 LANG=zh_CN.UTF-8 之后,在使用wget下載的時候,wget下載進度條異常,竟然不能在一行
    發表于 10-31 17:04 ?19次下載

    鴻蒙上安裝按鈕實現下載、暫停、取消、顯示等操作

    今天給大家分享在鴻蒙上一個按鈕實現下載、暫停、取消、顯示下載進度操作。
    的頭像 發表于 01-04 14:32 ?2329次閱讀

    使用OkHttp上傳和下載文件時顯示進度庫使用

    核心進展 該庫有助于在使用 OkHttp 上傳和下載文件時顯示進度。 CoreProgress 包括: 使用 OkHttp 下載文件時的進度
    發表于 03-24 11:17 ?5次下載

    OpenAI API Key獲取與充值教程:助開發者解鎖GPT-4.0 API

    OpenAI 的 API Key,以及如何使用這個 Key 來調用 GPT-4.0 API。 第一步:獲取 OpenAI API Key 要開始使用 OpenAI 的服務,你首先需要
    的頭像 發表于 04-28 16:35 ?1.1w次閱讀
    OpenAI <b class='flag-5'>API</b> Key<b class='flag-5'>獲取</b>與充值教程:助開發者解鎖GPT-4.0 <b class='flag-5'>API</b>
    主站蜘蛛池模板: 国产99视频精品一区| 欧美亚洲日本日韩在线| 中文字幕人妻无码系列第三区| 男人把女人桶到爽免费看视频| 久久国产高清视频| SM双性精跪趴灌憋尿调教H| 久久精品国产亚洲AV麻豆欧美玲 | 国产这里有精品| 99在线在线视频观看| 亚洲男人天堂网| 兽皇VIDEO另类HD| 国产午夜精品久久久久九九| aaaaaaa一级毛片| 在线 中文字幕| 亚洲高清国产拍精品动图| 全免费午夜一级毛片| 美国特级成人毛片| 国语自产一区视频| 国产精品视频人人做人人爽| 扒开女人下面使劲桶动态图| 456亚洲人成在线播放网站| 亚洲日韩中文字幕日本有码| 午夜家庭影院| 久久网站视频| 狠狠撸亚洲视频| 国产精品1卡二卡三卡四卡乱码| a久久99精品久久久久久蜜芽| 在线观看成年人免费视频| 亚洲欧美免费无码专区| 亚洲 日本 天堂 国产 在线| 天天看学生视频| 日日啪无需播放器| 人淫阁| 强奷乱码中文字幕熟女免费| 麻豆婷婷狠狠色18禁久久| 巨大乳hdbbw| 老少配xxxxx欧美| 国产人妻精品午夜福利免费不卡| 古风一女N男到处做高H| 成人国产精品视频频| 一色狗影院|