在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    1518

    瀏覽量

    62449
  • 文件
    +關注

    關注

    1

    文章

    571

    瀏覽量

    24834
  • 應用開發
    +關注

    關注

    0

    文章

    60

    瀏覽量

    9450
  • 鴻蒙
    +關注

    關注

    57

    文章

    2395

    瀏覽量

    43091
  • OpenHarmony
    +關注

    關注

    25

    文章

    3753

    瀏覽量

    16661

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

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

收藏 人收藏

    評論

    相關推薦

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

    平臺與ArkUI交互,ArkUI側具體用法請參考[Bridge API],Android側參考[BridgePlugin]。
    的頭像 發表于 05-25 16:26 ?833次閱讀
    鴻蒙<b class='flag-5'>ArkUI</b>-X跨語言調用說明:【平臺橋接開發指南(Android)】

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

    本模塊提供ArkUI端和Android平臺端消息通信的功能,包括數據傳輸、方法調用和事件調用。需配套ArkUIAPI使用,ArkUI側具體用法請參考[Bridge
    的頭像 發表于 05-22 14:52 ?1259次閱讀
    鴻蒙<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

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

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

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

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

    使用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>
    主站蜘蛛池模板: 夜夜操com | 亚洲邪恶天堂影院在线观看 | 最近2018中文字幕免费看手机 | 国产午夜一区二区在线观看 | 亚洲高清国产拍精品影院 | 噜噜色.com | 亚洲热热久久九九精品 | 日本69sex护士hd | 色多多视频在线 | 久操操操| 亚洲三级小视频 | 欧美簧片 | 天天爽天天爱 | 国产精品大全 | 看真人一级毛多毛片 | 日韩dv | 94久久国产乱子伦精品免费 | 四虎网站网址 | 狠狠操天天操视频 | 欧美涩色| 色在线看 | 深夜视频在线 | 成人剧场| 特黄色一级毛片 | 五月婷婷在线观看视频 | 国产在线免 | 亚欧有色亚欧乱色视频 | 国产精品嫩草影院在线播放 | 色吧首页dvd | 高h文男主又粗又狠 | 同性男男肉交短文 | 欧美极品xxxxⅹ另类 | 久久青草精品一区二区三区 | 午夜免费伦费影视在线观看 | 国产一区美女视频 | 亚洲无吗在线视频 | 亚洲天堂999| 伊人91在线| 同性恋激情视频 | 日本片巨大的乳456线观看 | 在线观看视频一区二区 |