• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Class (WebDownloadItem)
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> - 在下载过程中,下载的进程会通过WebDownloadDelegate通知给使用者,使用者可以通过参数WebDownloadItem来操作下载任务。
20>
21> - 当前WebDownloadItem支持的下载文件名最长长度为255字节<!--RP--><!--RPEnd-->。
22
23## 导入模块
24
25```ts
26import { webview } from '@kit.ArkWeb';
27```
28
29## getGuid<sup>11+</sup>
30
31getGuid(): string
32
33获取下载任务的唯一ID。
34
35**系统能力:** SystemCapability.Web.Webview.Core
36
37**返回值:**
38
39| 类型   | 说明                      |
40| ------ | ------------------------- |
41| string | 下载任务的唯一ID。 |
42
43**示例:**
44
45```ts
46// xxx.ets
47import { webview } from '@kit.ArkWeb';
48import { BusinessError } from '@kit.BasicServicesKit';
49
50@Entry
51@Component
52struct WebComponent {
53  controller: webview.WebviewController = new webview.WebviewController();
54  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
55
56  build() {
57    Column() {
58      Button('setDownloadDelegate')
59        .onClick(() => {
60          try {
61            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
62              console.info("will start a download.");
63              // 传入一个下载路径,并开始下载。
64              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
65            })
66            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
67              console.info("download update guid: " + webDownloadItem.getGuid());
68            })
69            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
70              console.info("download failed guid: " + webDownloadItem.getGuid());
71            })
72            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
73              console.info("download finish guid: " + webDownloadItem.getGuid());
74            })
75            this.controller.setDownloadDelegate(this.delegate);
76          } catch (error) {
77            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
78          }
79        })
80      Button('startDownload')
81        .onClick(() => {
82          try {
83            this.controller.startDownload('https://www.example.com');
84          } catch (error) {
85            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
86          }
87        })
88      Web({ src: 'www.example.com', controller: this.controller })
89    }
90  }
91}
92```
93
94## getCurrentSpeed<sup>11+</sup>
95
96getCurrentSpeed(): number
97
98获取下载的速度,单位:字节每秒。
99
100**系统能力:** SystemCapability.Web.Webview.Core
101
102**返回值:**
103
104| 类型   | 说明                      |
105| ------ | ------------------------- |
106| number | 下载的速度(字节每秒)。 |
107
108**示例:**
109
110```ts
111// xxx.ets
112import { webview } from '@kit.ArkWeb';
113import { BusinessError } from '@kit.BasicServicesKit';
114
115@Entry
116@Component
117struct WebComponent {
118  controller: webview.WebviewController = new webview.WebviewController();
119  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
120
121  build() {
122    Column() {
123      Button('setDownloadDelegate')
124        .onClick(() => {
125          try {
126            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
127              console.info("will start a download.");
128              // 传入一个下载路径,并开始下载。
129              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
130            })
131            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
132              console.info("download update current speed: " + webDownloadItem.getCurrentSpeed());
133            })
134            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
135              console.info("download failed guid: " + webDownloadItem.getGuid());
136            })
137            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
138              console.info("download finish guid: " + webDownloadItem.getGuid());
139            })
140            this.controller.setDownloadDelegate(this.delegate);
141          } catch (error) {
142            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
143          }
144        })
145      Button('startDownload')
146        .onClick(() => {
147          try {
148            this.controller.startDownload('https://www.example.com');
149          } catch (error) {
150            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
151          }
152        })
153      Web({ src: 'www.example.com', controller: this.controller })
154    }
155  }
156}
157```
158
159## getPercentComplete<sup>11+</sup>
160
161getPercentComplete(): number
162
163获取下载的进度,100代表下载完成。
164
165**系统能力:** SystemCapability.Web.Webview.Core
166
167**返回值:**
168
169| 类型   | 说明                      |
170| ------ | ------------------------- |
171| number | 下载完成的进度,100代表下载完成,-1代表进度未知。 |
172
173**示例:**
174
175```ts
176// xxx.ets
177import { webview } from '@kit.ArkWeb';
178import { BusinessError } from '@kit.BasicServicesKit';
179
180@Entry
181@Component
182struct WebComponent {
183  controller: webview.WebviewController = new webview.WebviewController();
184  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
185
186  build() {
187    Column() {
188      Button('setDownloadDelegate')
189        .onClick(() => {
190          try {
191            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
192              console.info("will start a download.");
193              // 传入一个下载路径,并开始下载。
194              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
195            })
196            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
197              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
198            })
199            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
200              console.info("download failed guid: " + webDownloadItem.getGuid());
201            })
202            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
203              console.info("download finish guid: " + webDownloadItem.getGuid());
204            })
205            this.controller.setDownloadDelegate(this.delegate);
206          } catch (error) {
207            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
208          }
209        })
210      Button('startDownload')
211        .onClick(() => {
212          try {
213            this.controller.startDownload('https://www.example.com');
214          } catch (error) {
215            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
216          }
217        })
218      Web({ src: 'www.example.com', controller: this.controller })
219    }
220  }
221}
222```
223
224## getTotalBytes<sup>11+</sup>
225
226getTotalBytes(): number
227
228获取待下载文件的总长度。
229
230**系统能力:** SystemCapability.Web.Webview.Core
231
232**返回值:**
233
234| 类型   | 说明                      |
235| ------ | ------------------------- |
236| number | 待下载文件的总长度,-1代表总大小未知。 |
237
238**示例:**
239
240```ts
241// xxx.ets
242import { webview } from '@kit.ArkWeb';
243import { BusinessError } from '@kit.BasicServicesKit';
244
245@Entry
246@Component
247struct WebComponent {
248  controller: webview.WebviewController = new webview.WebviewController();
249  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
250
251  build() {
252    Column() {
253      Button('setDownloadDelegate')
254        .onClick(() => {
255          try {
256            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
257              console.info("will start a download.");
258              // 传入一个下载路径,并开始下载。
259              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
260            })
261            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
262              console.info("download update total bytes: " + webDownloadItem.getTotalBytes());
263            })
264            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
265              console.info("download failed guid: " + webDownloadItem.getGuid());
266            })
267            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
268              console.info("download finish guid: " + webDownloadItem.getGuid());
269            })
270            this.controller.setDownloadDelegate(this.delegate);
271          } catch (error) {
272            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
273          }
274        })
275      Button('startDownload')
276        .onClick(() => {
277          try {
278            this.controller.startDownload('https://www.example.com');
279          } catch (error) {
280            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
281          }
282        })
283      Web({ src: 'www.example.com', controller: this.controller })
284    }
285  }
286}
287```
288
289## getState<sup>11+</sup>
290
291getState(): WebDownloadState
292
293获取下载的状态。
294
295**系统能力:** SystemCapability.Web.Webview.Core
296
297**返回值:**
298
299| 类型   | 说明                      |
300| ------ | ------------------------- |
301| [WebDownloadState](./arkts-apis-webview-e.md#webdownloadstate11) | 下载的状态。 |
302
303**示例:**
304
305```ts
306// xxx.ets
307import { webview } from '@kit.ArkWeb';
308import { BusinessError } from '@kit.BasicServicesKit';
309
310@Entry
311@Component
312struct WebComponent {
313  controller: webview.WebviewController = new webview.WebviewController();
314  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
315
316  build() {
317    Column() {
318      Button('setDownloadDelegate')
319        .onClick(() => {
320          try {
321            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
322              console.info("will start a download.");
323              // 传入一个下载路径,并开始下载。
324              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
325            })
326            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
327              console.info("download update download state: " + webDownloadItem.getState());
328            })
329            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
330              console.info("download failed guid: " + webDownloadItem.getGuid());
331            })
332            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
333              console.info("download finish guid: " + webDownloadItem.getGuid());
334            })
335            this.controller.setDownloadDelegate(this.delegate);
336          } catch (error) {
337            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
338          }
339        })
340      Button('startDownload')
341        .onClick(() => {
342          try {
343            this.controller.startDownload('https://www.example.com');
344          } catch (error) {
345            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
346          }
347        })
348      Web({ src: 'www.example.com', controller: this.controller })
349    }
350  }
351}
352```
353
354## getLastErrorCode<sup>11+</sup>
355
356getLastErrorCode(): WebDownloadErrorCode
357
358获取下载的错误码。
359
360**系统能力:** SystemCapability.Web.Webview.Core
361
362**返回值:**
363
364| 类型   | 说明                      |
365| ------ | ------------------------- |
366| [WebDownloadErrorCode](./arkts-apis-webview-e.md#webdownloaderrorcode11) | 下载发生错误的时候的错误码。 |
367
368**示例:**
369
370```ts
371// xxx.ets
372import { webview } from '@kit.ArkWeb';
373import { BusinessError } from '@kit.BasicServicesKit';
374
375@Entry
376@Component
377struct WebComponent {
378  controller: webview.WebviewController = new webview.WebviewController();
379  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
380
381  build() {
382    Column() {
383      Button('setDownloadDelegate')
384        .onClick(() => {
385          try {
386            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
387              console.info("will start a download.");
388              // 传入一个下载路径,并开始下载。
389              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
390            })
391            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
392              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
393            })
394            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
395              console.info("download failed guid: " + webDownloadItem.getGuid());
396              console.info("download error code: " + webDownloadItem.getLastErrorCode());
397            })
398            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
399              console.info("download finish guid: " + webDownloadItem.getGuid());
400            })
401            this.controller.setDownloadDelegate(this.delegate);
402          } catch (error) {
403            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
404          }
405        })
406      Button('startDownload')
407        .onClick(() => {
408          try {
409            this.controller.startDownload('https://www.example.com');
410          } catch (error) {
411            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
412          }
413        })
414      Web({ src: 'www.example.com', controller: this.controller })
415    }
416  }
417}
418```
419
420## getMethod<sup>11+</sup>
421
422getMethod(): string
423
424获取下载任务的请求方式。
425
426**系统能力:** SystemCapability.Web.Webview.Core
427
428**返回值:**
429
430| 类型   | 说明                      |
431| ------ | ------------------------- |
432| string | 下载的请求方式。 |
433
434**示例:**
435
436```ts
437// xxx.ets
438import { webview } from '@kit.ArkWeb';
439import { BusinessError } from '@kit.BasicServicesKit';
440
441@Entry
442@Component
443struct WebComponent {
444  controller: webview.WebviewController = new webview.WebviewController();
445  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
446
447  build() {
448    Column() {
449      Button('setDownloadDelegate')
450        .onClick(() => {
451          try {
452            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
453              console.info("will start a download, method:" + webDownloadItem.getMethod());
454              // 传入一个下载路径,并开始下载。
455              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
456            })
457            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
458              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
459            })
460            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
461              console.info("download failed guid: " + webDownloadItem.getGuid());
462            })
463            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
464              console.info("download finish guid: " + webDownloadItem.getGuid());
465            })
466            this.controller.setDownloadDelegate(this.delegate);
467          } catch (error) {
468            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
469          }
470        })
471      Button('startDownload')
472        .onClick(() => {
473          try {
474            this.controller.startDownload('https://www.example.com');
475          } catch (error) {
476            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
477          }
478        })
479      Web({ src: 'www.example.com', controller: this.controller })
480    }
481  }
482}
483```
484
485## getMimeType<sup>11+</sup>
486
487getMimeType(): string
488
489获取下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。
490
491**系统能力:** SystemCapability.Web.Webview.Core
492
493**返回值:**
494
495| 类型   | 说明                      |
496| ------ | ------------------------- |
497| string | 下载的媒体类型(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png)。|
498
499**示例:**
500
501```ts
502// xxx.ets
503import { webview } from '@kit.ArkWeb';
504import { BusinessError } from '@kit.BasicServicesKit';
505
506@Entry
507@Component
508struct WebComponent {
509  controller: webview.WebviewController = new webview.WebviewController();
510  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
511
512  build() {
513    Column() {
514      Button('setDownloadDelegate')
515        .onClick(() => {
516          try {
517            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
518              console.info("will start a download, mime type:" + webDownloadItem.getMimeType());
519              // 传入一个下载路径,并开始下载。
520              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
521            })
522            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
523              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
524            })
525            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
526              console.info("download failed guid: " + webDownloadItem.getGuid());
527            })
528            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
529              console.info("download finish guid: " + webDownloadItem.getGuid());
530            })
531            this.controller.setDownloadDelegate(this.delegate);
532          } catch (error) {
533            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
534          }
535        })
536      Button('startDownload')
537        .onClick(() => {
538          try {
539            this.controller.startDownload('https://www.example.com');
540          } catch (error) {
541            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
542          }
543        })
544      Web({ src: 'www.example.com', controller: this.controller })
545    }
546  }
547}
548```
549
550## getUrl<sup>11+</sup>
551
552getUrl(): string
553
554获取下载的请求地址。
555
556**系统能力:** SystemCapability.Web.Webview.Core
557
558**返回值:**
559
560| 类型   | 说明                      |
561| ------ | ------------------------- |
562| string | 下载的请求地址。 |
563
564**示例:**
565
566```ts
567// xxx.ets
568import { webview } from '@kit.ArkWeb';
569import { BusinessError } from '@kit.BasicServicesKit';
570
571@Entry
572@Component
573struct WebComponent {
574  controller: webview.WebviewController = new webview.WebviewController();
575  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
576
577  build() {
578    Column() {
579      Button('setDownloadDelegate')
580        .onClick(() => {
581          try {
582            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
583              console.info("will start a download, url:" + webDownloadItem.getUrl());
584              // 传入一个下载路径,并开始下载。
585              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
586            })
587            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
588              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
589            })
590            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
591              console.info("download failed guid: " + webDownloadItem.getGuid());
592            })
593            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
594              console.info("download finish guid: " + webDownloadItem.getGuid());
595            })
596            this.controller.setDownloadDelegate(this.delegate);
597          } catch (error) {
598            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
599          }
600        })
601      Button('startDownload')
602        .onClick(() => {
603          try {
604            this.controller.startDownload('https://www.example.com');
605          } catch (error) {
606            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
607          }
608        })
609      Web({ src: 'www.example.com', controller: this.controller })
610    }
611  }
612}
613```
614
615## getSuggestedFileName<sup>11+</sup>
616
617getSuggestedFileName(): string
618
619获取下载的建议文件名。
620
621**系统能力:** SystemCapability.Web.Webview.Core
622
623**返回值:**
624
625| 类型   | 说明                      |
626| ------ | ------------------------- |
627| string | 下载的建议文件名。 |
628
629**示例:**
630
631```ts
632// xxx.ets
633import { webview } from '@kit.ArkWeb';
634import { BusinessError } from '@kit.BasicServicesKit';
635
636@Entry
637@Component
638struct WebComponent {
639  controller: webview.WebviewController = new webview.WebviewController();
640  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
641
642  build() {
643    Column() {
644      Button('setDownloadDelegate')
645        .onClick(() => {
646          try {
647            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
648              console.info("will start a download, suggest name:" + webDownloadItem.getSuggestedFileName());
649              // 传入一个下载路径,并开始下载。
650              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
651            })
652            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
653              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
654            })
655            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
656              console.info("download failed guid: " + webDownloadItem.getGuid());
657            })
658            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
659              console.info("download finish guid: " + webDownloadItem.getGuid());
660            })
661            this.controller.setDownloadDelegate(this.delegate);
662          } catch (error) {
663            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
664          }
665        })
666      Button('startDownload')
667        .onClick(() => {
668          try {
669            this.controller.startDownload('https://www.example.com');
670          } catch (error) {
671            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
672          }
673        })
674      Web({ src: 'www.example.com', controller: this.controller })
675    }
676  }
677}
678```
679
680## getReceivedBytes<sup>11+</sup>
681
682getReceivedBytes(): number
683
684获取已经接收的字节数。
685
686**系统能力:** SystemCapability.Web.Webview.Core
687
688**返回值:**
689
690| 类型   | 说明                      |
691| ------ | ------------------------- |
692| number | 已经接收的字节数。 |
693
694**示例:**
695
696```ts
697// xxx.ets
698import { webview } from '@kit.ArkWeb';
699import { BusinessError } from '@kit.BasicServicesKit';
700
701@Entry
702@Component
703struct WebComponent {
704  controller: webview.WebviewController = new webview.WebviewController();
705  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
706
707  build() {
708    Column() {
709      Button('setDownloadDelegate')
710        .onClick(() => {
711          try {
712            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
713              console.info("will start a download.");
714              // 传入一个下载路径,并开始下载。
715              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
716            })
717            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
718              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
719              console.info("download update received bytes: " + webDownloadItem.getReceivedBytes());
720            })
721            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
722              console.info("download failed guid: " + webDownloadItem.getGuid());
723            })
724            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
725              console.info("download finish guid: " + webDownloadItem.getGuid());
726            })
727            this.controller.setDownloadDelegate(this.delegate);
728          } catch (error) {
729            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
730          }
731        })
732      Button('startDownload')
733        .onClick(() => {
734          try {
735            this.controller.startDownload('https://www.example.com');
736          } catch (error) {
737            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
738          }
739        })
740      Web({ src: 'www.example.com', controller: this.controller })
741    }
742  }
743}
744```
745
746## getFullPath<sup>11+</sup>
747
748getFullPath(): string
749
750获取下载文件在磁盘上的全路径。
751
752**系统能力:** SystemCapability.Web.Webview.Core
753
754**返回值:**
755
756| 类型   | 说明                      |
757| ------ | ------------------------- |
758| string | 下载文件在磁盘上的全路径。 |
759
760**示例:**
761
762```ts
763// xxx.ets
764import { webview } from '@kit.ArkWeb';
765import { BusinessError } from '@kit.BasicServicesKit';
766
767@Entry
768@Component
769struct WebComponent {
770  controller: webview.WebviewController = new webview.WebviewController();
771  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
772
773  build() {
774    Column() {
775      Button('setDownloadDelegate')
776        .onClick(() => {
777          try {
778            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
779              console.info("will start a download.");
780              // 传入一个下载路径,并开始下载。
781              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
782            })
783            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
784              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
785            })
786            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
787              console.info("download failed guid: " + webDownloadItem.getGuid());
788            })
789            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
790              console.info("download finish guid: " + webDownloadItem.getGuid());
791              console.info("download finish full path: " + webDownloadItem.getFullPath());
792            })
793            this.controller.setDownloadDelegate(this.delegate);
794          } catch (error) {
795            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
796          }
797        })
798      Button('startDownload')
799        .onClick(() => {
800          try {
801            this.controller.startDownload('https://www.example.com');
802          } catch (error) {
803            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
804          }
805        })
806      Web({ src: 'www.example.com', controller: this.controller })
807    }
808  }
809}
810```
811
812## serialize<sup>11+</sup>
813
814serialize(): Uint8Array
815
816将失败的下载序列化到一个字节数组。
817
818**系统能力:** SystemCapability.Web.Webview.Core
819
820**返回值:**
821
822| 类型   | 说明                      |
823| ------ | ------------------------- |
824| Uint8Array | 失败的下载序列化后的字节数组。 |
825
826**示例:**
827
828```ts
829// xxx.ets
830import { webview } from '@kit.ArkWeb';
831import { BusinessError } from '@kit.BasicServicesKit';
832
833@Entry
834@Component
835struct WebComponent {
836  controller: webview.WebviewController = new webview.WebviewController();
837  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
838  failedData: Uint8Array = new Uint8Array();
839
840  build() {
841    Column() {
842      Button('setDownloadDelegate')
843        .onClick(() => {
844          try {
845            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
846              console.info("will start a download.");
847              // 传入一个下载路径,并开始下载。
848              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
849            })
850            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
851              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
852            })
853            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
854              console.info("download failed guid: " + webDownloadItem.getGuid());
855              // 序列化失败的下载到一个字节数组。
856              this.failedData = webDownloadItem.serialize();
857            })
858            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
859              console.info("download finish guid: " + webDownloadItem.getGuid());
860            })
861            this.controller.setDownloadDelegate(this.delegate);
862          } catch (error) {
863            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
864          }
865        })
866      Button('startDownload')
867        .onClick(() => {
868          try {
869            this.controller.startDownload('https://www.example.com');
870          } catch (error) {
871            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
872          }
873        })
874      Web({ src: 'www.example.com', controller: this.controller })
875    }
876  }
877}
878```
879
880## deserialize<sup>11+</sup>
881
882static deserialize(serializedData: Uint8Array): WebDownloadItem
883
884将序列化后的字节数组反序列化为一个WebDownloadItem对象。
885
886**系统能力:** SystemCapability.Web.Webview.Core
887
888**参数:**
889
890| 参数名              | 类型    | 必填   |  说明 |
891| ------------------ | ------- | ---- | ------------- |
892| serializedData | Uint8Array | 是   | 序列化后的下载。|
893
894**返回值:**
895
896| 类型   | 说明                      |
897| ------ | ------------------------- |
898| WebDownloadItem | 从字节数组反序列化为一个WebDownloadItem对象。 |
899
900**错误码:**
901
902以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
903
904| 错误码ID | 错误信息                                                     |
905| -------- | ------------------------------------------------------------ |
906| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed.  |
907
908**示例:**
909
910```ts
911// xxx.ets
912import { webview } from '@kit.ArkWeb';
913import { BusinessError } from '@kit.BasicServicesKit';
914
915@Entry
916@Component
917struct WebComponent {
918  controller: webview.WebviewController = new webview.WebviewController();
919  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
920  failedData: Uint8Array = new Uint8Array();
921
922  build() {
923    Column() {
924      Button('setDownloadDelegate')
925        .onClick(() => {
926          try {
927            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
928              console.info("will start a download.");
929              // 传入一个下载路径,并开始下载。
930              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
931            })
932            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
933              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
934            })
935            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
936              console.info("download failed guid: " + webDownloadItem.getGuid());
937              // 序列化失败的下载到一个字节数组。
938              this.failedData = webDownloadItem.serialize();
939            })
940            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
941              console.info("download finish guid: " + webDownloadItem.getGuid());
942            })
943            this.controller.setDownloadDelegate(this.delegate);
944          } catch (error) {
945            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
946          }
947        })
948      Button('startDownload')
949        .onClick(() => {
950          try {
951            this.controller.startDownload('https://www.example.com');
952          } catch (error) {
953            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
954          }
955        })
956      Button('resumeDownload')
957        .onClick(() => {
958          try {
959            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
960          } catch (error) {
961            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
962          }
963        })
964      Web({ src: 'www.example.com', controller: this.controller })
965    }
966  }
967}
968```
969
970## start<sup>11+</sup>
971
972start(downloadPath: string): void
973
974开始下载到指定目录,参数为下载文件的磁盘存储路径(包含文件名)。
975
976> **说明:**
977>
978>该接口应在WebDownloadDelegate的onBeforeDownload回调中使用。若在WebDownloadDelegate的onBeforeDownload中未调用start('xxx'),则下载任务将保持在PENDING状态。处于PENDING状态的下载会将文件下载到临时目录,临时文件会在WebDownloadItem.start指定目标路径后被重命名为目标路径,未下载完成的部分会在WebDownloadItem.start指定目标路径后直接下载到目标路径。如果在调用WebDownloadItem.start之前不希望下载到临时文件路径,可以先通过WebDownloadItem.cancel取消当前下载任务,随后通过WebDownloadManager.resumeDownload恢复被取消的下载任务。
979
980**系统能力:** SystemCapability.Web.Webview.Core
981
982**参数:**
983
984| 参数名 | 类型                   | 必填 | 说明                             |
985| ------ | ---------------------- | ---- | ------------------------------|
986| downloadPath   | string     | 是  | 下载文件的路径(包含文件名),路径长度与文件管理中长度一致,最长255字符。 |
987
988**错误码:**
989
990以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
991
992| 错误码ID | 错误信息                                                     |
993| -------- | ------------------------------------------------------------ |
994| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed.  |
995
996**示例:**
997
998```ts
999// xxx.ets
1000import { webview } from '@kit.ArkWeb';
1001import { BusinessError } from '@kit.BasicServicesKit';
1002
1003@Entry
1004@Component
1005struct WebComponent {
1006  controller: webview.WebviewController = new webview.WebviewController();
1007  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
1008  failedData: Uint8Array = new Uint8Array();
1009
1010  build() {
1011    Column() {
1012      Button('setDownloadDelegate')
1013        .onClick(() => {
1014          try {
1015            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
1016              console.info("will start a download.");
1017              // 传入一个下载路径,并开始下载。
1018              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
1019            })
1020            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
1021              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
1022            })
1023            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
1024              console.info("download failed guid: " + webDownloadItem.getGuid());
1025              // 序列化失败的下载到一个字节数组。
1026              this.failedData = webDownloadItem.serialize();
1027            })
1028            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
1029              console.info("download finish guid: " + webDownloadItem.getGuid());
1030            })
1031            this.controller.setDownloadDelegate(this.delegate);
1032          } catch (error) {
1033            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1034          }
1035        })
1036      Button('startDownload')
1037        .onClick(() => {
1038          try {
1039            this.controller.startDownload('https://www.example.com');
1040          } catch (error) {
1041            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1042          }
1043        })
1044      Button('resumeDownload')
1045        .onClick(() => {
1046          try {
1047            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
1048          } catch (error) {
1049            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1050          }
1051        })
1052      Web({ src: 'www.example.com', controller: this.controller })
1053    }
1054  }
1055}
1056```
1057
1058## cancel<sup>11+</sup>
1059
1060cancel(): void
1061
1062取消一个正在下载的下载任务。
1063
1064**系统能力:** SystemCapability.Web.Webview.Core
1065
1066**示例:**
1067
1068```ts
1069// xxx.ets
1070import { webview } from '@kit.ArkWeb';
1071import { BusinessError } from '@kit.BasicServicesKit';
1072
1073@Entry
1074@Component
1075struct WebComponent {
1076  controller: webview.WebviewController = new webview.WebviewController();
1077  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
1078  download: webview.WebDownloadItem = new webview.WebDownloadItem();
1079  failedData: Uint8Array = new Uint8Array();
1080
1081  build() {
1082    Column() {
1083      Button('setDownloadDelegate')
1084        .onClick(() => {
1085          try {
1086            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
1087              console.info("will start a download.");
1088              // 传入一个下载路径,并开始下载。
1089              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
1090            })
1091            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
1092              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
1093              this.download = webDownloadItem;
1094            })
1095            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
1096              console.info("download failed guid: " + webDownloadItem.getGuid());
1097              // 序列化失败的下载到一个字节数组。
1098              this.failedData = webDownloadItem.serialize();
1099            })
1100            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
1101              console.info("download finish guid: " + webDownloadItem.getGuid());
1102            })
1103            this.controller.setDownloadDelegate(this.delegate);
1104          } catch (error) {
1105            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1106          }
1107        })
1108      Button('startDownload')
1109        .onClick(() => {
1110          try {
1111            this.controller.startDownload('https://www.example.com');
1112          } catch (error) {
1113            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1114          }
1115        })
1116      Button('resumeDownload')
1117        .onClick(() => {
1118          try {
1119            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
1120          } catch (error) {
1121            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1122          }
1123        })
1124      Button('cancel')
1125        .onClick(() => {
1126          try {
1127            this.download.cancel();
1128          } catch (error) {
1129            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1130          }
1131        })
1132      Web({ src: 'www.example.com', controller: this.controller })
1133    }
1134  }
1135}
1136```
1137
1138## pause<sup>11+</sup>
1139
1140pause(): void
1141
1142暂停一个正在下载的下载任务。
1143
1144**系统能力:** SystemCapability.Web.Webview.Core
1145
1146**错误码:**
1147
1148以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1149
1150| 错误码ID  | 错误信息                                                      |
1151| -------- | ------------------------------------------------------------ |
1152| 17100019 | The download task is not started yet. |
1153
1154**示例:**
1155
1156```ts
1157// xxx.ets
1158import { webview } from '@kit.ArkWeb';
1159import { BusinessError } from '@kit.BasicServicesKit';
1160
1161@Entry
1162@Component
1163struct WebComponent {
1164  controller: webview.WebviewController = new webview.WebviewController();
1165  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
1166  download: webview.WebDownloadItem = new webview.WebDownloadItem();
1167  failedData: Uint8Array = new Uint8Array();
1168
1169  build() {
1170    Column() {
1171      Button('setDownloadDelegate')
1172        .onClick(() => {
1173          try {
1174            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
1175              console.info("will start a download.");
1176              // 传入一个下载路径,并开始下载。
1177              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
1178            })
1179            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
1180              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
1181              this.download = webDownloadItem;
1182            })
1183            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
1184              console.info("download failed guid: " + webDownloadItem.getGuid());
1185              // 序列化失败的下载到一个字节数组。
1186              this.failedData = webDownloadItem.serialize();
1187            })
1188            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
1189              console.info("download finish guid: " + webDownloadItem.getGuid());
1190            })
1191            this.controller.setDownloadDelegate(this.delegate);
1192          } catch (error) {
1193            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1194          }
1195        })
1196      Button('startDownload')
1197        .onClick(() => {
1198          try {
1199            this.controller.startDownload('https://www.example.com');
1200          } catch (error) {
1201            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1202          }
1203        })
1204      Button('resumeDownload')
1205        .onClick(() => {
1206          try {
1207            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
1208          } catch (error) {
1209            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1210          }
1211        })
1212      Button('cancel')
1213        .onClick(() => {
1214          try {
1215            this.download.cancel();
1216          } catch (error) {
1217            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1218          }
1219        })
1220      Button('pause')
1221        .onClick(() => {
1222          try {
1223            this.download.pause();
1224          } catch (error) {
1225            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1226          }
1227        })
1228      Web({ src: 'www.example.com', controller: this.controller })
1229    }
1230  }
1231}
1232```
1233
1234## resume<sup>11+</sup>
1235
1236resume(): void
1237
1238恢复一个暂停的下载任务。
1239
1240**系统能力:** SystemCapability.Web.Webview.Core
1241
1242**错误码:**
1243
1244以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
1245
1246| 错误码ID  | 错误信息                                                      |
1247| -------- | ------------------------------------------------------------ |
1248| 17100016 | The download task is not paused. |
1249
1250**示例:**
1251
1252```ts
1253// xxx.ets
1254import { webview } from '@kit.ArkWeb';
1255import { BusinessError } from '@kit.BasicServicesKit';
1256
1257@Entry
1258@Component
1259struct WebComponent {
1260  controller: webview.WebviewController = new webview.WebviewController();
1261  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
1262  download: webview.WebDownloadItem = new webview.WebDownloadItem();
1263  failedData: Uint8Array = new Uint8Array();
1264
1265  build() {
1266    Column() {
1267      Button('setDownloadDelegate')
1268        .onClick(() => {
1269          try {
1270            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
1271              console.info("will start a download.");
1272              // 传入一个下载路径,并开始下载。
1273              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
1274            })
1275            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
1276              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
1277              this.download = webDownloadItem;
1278            })
1279            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
1280              console.info("download failed guid: " + webDownloadItem.getGuid());
1281              // 序列化失败的下载到一个字节数组。
1282              this.failedData = webDownloadItem.serialize();
1283            })
1284            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
1285              console.info("download finish guid: " + webDownloadItem.getGuid());
1286            })
1287            this.controller.setDownloadDelegate(this.delegate);
1288          } catch (error) {
1289            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1290          }
1291        })
1292      Button('startDownload')
1293        .onClick(() => {
1294          try {
1295            this.controller.startDownload('https://www.example.com');
1296          } catch (error) {
1297            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1298          }
1299        })
1300      Button('resumeDownload')
1301        .onClick(() => {
1302          try {
1303            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
1304          } catch (error) {
1305            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1306          }
1307        })
1308      Button('cancel')
1309        .onClick(() => {
1310          try {
1311            this.download.cancel();
1312          } catch (error) {
1313            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1314          }
1315        })
1316      Button('pause')
1317        .onClick(() => {
1318          try {
1319            this.download.pause();
1320          } catch (error) {
1321            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1322          }
1323        })
1324      Button('resume')
1325        .onClick(() => {
1326          try {
1327            this.download.resume();
1328          } catch (error) {
1329            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
1330          }
1331        })
1332      Web({ src: 'www.example.com', controller: this.controller })
1333    }
1334  }
1335}
1336```