1# Class (WebDownloadManager) 2<!--Kit: ArkWeb--> 3<!--Subsystem: Web--> 4<!--Owner: @aohui--> 5<!--Designer: @yaomingliu--> 6<!--Tester: @ghiker--> 7<!--Adviser: @HelloCrease--> 8 9可以通过该类提供的接口来恢复失败的下载任务。 10 11> **说明:** 12> 13> - 本模块首批接口从API version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 14> 15> - 本Class首批接口从API version 11开始支持。 16> 17> - 示例效果请以真机运行为准,当前DevEco Studio预览器不支持。 18 19## 导入模块 20 21```ts 22import { webview } from '@kit.ArkWeb'; 23``` 24 25## setDownloadDelegate<sup>11+</sup> 26 27static setDownloadDelegate(delegate: WebDownloadDelegate): void 28 29设置用于接收从WebDownloadManager触发的下载进度的委托。 30 31**系统能力:** SystemCapability.Web.Webview.Core 32 33**参数:** 34 35| 参数名 | 类型 | 必填 | 说明 | 36| ---------------| ------- | ---- | ------------- | 37| delegate | [WebDownloadDelegate](./arkts-apis-webview-WebDownloadDelegate.md) | 是 | 用来接收下载进回调的委托。 | 38 39**示例:** 40 41```ts 42// xxx.ets 43import { webview } from '@kit.ArkWeb'; 44import { BusinessError } from '@kit.BasicServicesKit'; 45 46@Entry 47@Component 48struct WebComponent { 49 controller: webview.WebviewController = new webview.WebviewController(); 50 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 51 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 52 failedData: Uint8Array = new Uint8Array(); 53 54 build() { 55 Column() { 56 Button('setDownloadDelegate') 57 .onClick(() => { 58 try { 59 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 60 console.info("will start a download."); 61 // 传入一个下载路径,并开始下载。 62 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 63 }) 64 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 65 console.info("download update percent complete: " + webDownloadItem.getPercentComplete()); 66 this.download = webDownloadItem; 67 }) 68 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 69 console.info("download failed guid: " + webDownloadItem.getGuid()); 70 // 序列化失败的下载到一个字节数组。 71 this.failedData = webDownloadItem.serialize(); 72 }) 73 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 74 console.info("download finish guid: " + webDownloadItem.getGuid()); 75 }) 76 this.controller.setDownloadDelegate(this.delegate); 77 webview.WebDownloadManager.setDownloadDelegate(this.delegate); 78 } catch (error) { 79 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 80 } 81 }) 82 Button('startDownload') 83 .onClick(() => { 84 try { 85 this.controller.startDownload('https://www.example.com'); 86 } catch (error) { 87 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 88 } 89 }) 90 Button('resumeDownload') 91 .onClick(() => { 92 try { 93 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 94 } catch (error) { 95 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 96 } 97 }) 98 Button('cancel') 99 .onClick(() => { 100 try { 101 this.download.cancel(); 102 } catch (error) { 103 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 104 } 105 }) 106 Button('pause') 107 .onClick(() => { 108 try { 109 this.download.pause(); 110 } catch (error) { 111 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 112 } 113 }) 114 Button('resume') 115 .onClick(() => { 116 try { 117 this.download.resume(); 118 } catch (error) { 119 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 120 } 121 }) 122 Web({ src: 'www.example.com', controller: this.controller }) 123 } 124 } 125} 126``` 127 128## resumeDownload<sup>11+</sup> 129 130static resumeDownload(webDownloadItem: WebDownloadItem): void 131 132恢复一个失败的下载任务。 133 134**系统能力:** SystemCapability.Web.Webview.Core 135 136**参数:** 137 138| 参数名 | 类型 | 必填 | 说明 | 139| ---------------| ------- | ---- | ------------- | 140| webDownloadItem | [WebDownloadItem](./arkts-apis-webview-WebDownloadItem.md) | 是 | 待恢复的下载任务。 | 141 142**错误码:** 143 144以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 145 146| 错误码ID | 错误信息 | 147| -------- | ------------------------------------- | 148| 17100018 | No WebDownloadDelegate has been set yet. | 149 150**示例:** 151 152```ts 153// xxx.ets 154import { webview } from '@kit.ArkWeb'; 155import { BusinessError } from '@kit.BasicServicesKit'; 156 157@Entry 158@Component 159struct WebComponent { 160 controller: webview.WebviewController = new webview.WebviewController(); 161 delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate(); 162 download: webview.WebDownloadItem = new webview.WebDownloadItem(); 163 failedData: Uint8Array = new Uint8Array(); 164 165 build() { 166 Column() { 167 Button('setDownloadDelegate') 168 .onClick(() => { 169 try { 170 this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => { 171 console.info("will start a download."); 172 // 传入一个下载路径,并开始下载。 173 webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()); 174 }) 175 this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => { 176 console.info("download update percent complete: " + webDownloadItem.getPercentComplete()); 177 this.download = webDownloadItem; 178 }) 179 this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => { 180 console.info("download failed guid: " + webDownloadItem.getGuid()); 181 // 序列化失败的下载到一个字节数组。 182 this.failedData = webDownloadItem.serialize(); 183 }) 184 this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => { 185 console.info("download finish guid: " + webDownloadItem.getGuid()); 186 }) 187 this.controller.setDownloadDelegate(this.delegate); 188 webview.WebDownloadManager.setDownloadDelegate(this.delegate); 189 } catch (error) { 190 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 191 } 192 }) 193 Button('startDownload') 194 .onClick(() => { 195 try { 196 this.controller.startDownload('https://www.example.com'); 197 } catch (error) { 198 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 199 } 200 }) 201 Button('resumeDownload') 202 .onClick(() => { 203 try { 204 webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData)); 205 } catch (error) { 206 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 207 } 208 }) 209 Button('cancel') 210 .onClick(() => { 211 try { 212 this.download.cancel(); 213 } catch (error) { 214 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 215 } 216 }) 217 Button('pause') 218 .onClick(() => { 219 try { 220 this.download.pause(); 221 } catch (error) { 222 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 223 } 224 }) 225 Button('resume') 226 .onClick(() => { 227 try { 228 this.download.resume(); 229 } catch (error) { 230 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 231 } 232 }) 233 Web({ src: 'www.example.com', controller: this.controller }) 234 } 235 } 236} 237```