js-apis-request.md 28.6 KB
Newer Older
Z
zengyawen 已提交
1
# 上传下载
Z
zengyawen 已提交
2 3 4 5 6 7 8 9 10


> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。


## 导入模块


Z
zengyawen 已提交
11
```js
Z
zengyawen 已提交
12 13 14 15 16 17
import request from '@ohos.request';
```


## 限制与约束

Z
zengyawen 已提交
18 19 20 21 22 23 24
默认支持https,如果要支持http,需要在config.json里增加network标签,属性标识 "cleartextTraffic": true。即:

```
  "deviceConfig": {
    "default": {
      "network": {
        "cleartextTraffic": true
Z
zengyawen 已提交
25
      }
Z
zengyawen 已提交
26
      ...
Z
zengyawen 已提交
27
    }
Z
zengyawen 已提交
28 29
  }
```
Z
zengyawen 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71


## 常量

**需要权限**:ohos.permission.INTERNET

**系统能力**: 以下各项对应的系统能力均为SystemCapability.MiscServices.Download。

| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
| NETWORK_MOBILE | number | 是 | 否 | 使用蜂窝网络时允许下载的位标志。 |
| NETWORK_WIFI | number | 是 | 否 | 使用WLAN时允许下载的位标志。 |
| ERROR_CANNOT_RESUME<sup>7+</sup> | number | 是 | 否 | 某些临时错误导致的恢复下载失败。 |
| ERROR_DEVICE_NOT_FOUND<sup>7+</sup> | number | 是 | 否 | 找不到SD卡等存储设备。 |
| ERROR_FILE_ALREADY_EXISTS<sup>7+</sup> | number | 是 | 否 | 要下载的文件已存在,下载会话不能覆盖现有文件。 |
| ERROR_FILE_ERROR<sup>7+</sup> | number | 是 | 否 | 文件操作失败。 |
| ERROR_HTTP_DATA_ERROR<sup>7+</sup> | number | 是 | 否 | HTTP传输失败。 |
| ERROR_INSUFFICIENT_SPACE<sup>7+</sup> | number | 是 | 否 | 存储空间不足。 |
| ERROR_TOO_MANY_REDIRECTS<sup>7+</sup> | number | 是 | 否 | 网络重定向过多导致的错误。 |
| ERROR_UNHANDLED_HTTP_CODE<sup>7+</sup> | number | 是 | 否 | 无法识别的HTTP代码。 |
| ERROR_UNKNOWN<sup>7+</sup> | number | 是 | 否 | 未知错误。 |
| PAUSED_QUEUED_FOR_WIFI<sup>7+</sup> | number | 是 | 否 | 下载被暂停并等待WLAN连接,因为文件大小超过了使用蜂窝网络的会话允许的最大值。 |
| PAUSED_UNKNOWN<sup>7+</sup> | number | 是 | 否 | 未知原因导致暂停下载。 |
| PAUSED_WAITING_FOR_NETWORK<sup>7+</sup> | number | 是 | 否 | 由于网络问题(例如网络断开)而暂停下载。 |
| PAUSED_WAITING_TO_RETRY<sup>7+</sup> | number | 是 | 否 | 发生网络错误,将重试下载会话。 |
| SESSION_FAILED<sup>7+</sup> | number | 是 | 否 | 下载会话已失败,将不会重试。 |
| SESSION_PAUSED<sup>7+</sup> | number | 是 | 否 | 下载会话已暂停。 |
| SESSION_PENDING<sup>7+</sup> | number | 是 | 否 | 正在调度下载会话。 |
| SESSION_RUNNING<sup>7+</sup> | number | 是 | 否 | 下载会话正在进行中。 |
| SESSION_SUCCESSFUL<sup>7+</sup> | number | 是 | 否 | 下载会话已完成。 |


## request.upload

upload(config: UploadConfig): Promise&lt;UploadTask&gt;

上传,异步方法,使用promise形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Upload

72 73 74
**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
75
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
76
  | config | [UploadConfig](#uploadconfig) | 是 | 上传的配置信息。 |
Z
zengyawen 已提交
77

78 79 80
**返回值:**

  | 类型 | 说明 |
Z
zengyawen 已提交
81
  | -------- | -------- |
Z
zengyawen 已提交
82
  | Promise&lt;[UploadTask](#uploadtask)&gt; | 返回上传任务。 |
Z
zengyawen 已提交
83

84
**示例:**
Z
zengyawen 已提交
85
  
86
  ```js
87
  let file1 = { filename: "test", name: "test", uri: "internal://cache/test.jpg", type: "jpg" };
88 89
  let data = { name: "name123", value: "123" };
  let header = { key1: value1, key2: value2 };
90
  let uploadTask;
91
  request.upload({ url: 'https://patch', header: header, method: "POST", files: [file1], data: [data] }).then((data) => {
Z
zengyawen 已提交
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
      uploadTask = data;
  }).catch((err) => {
      console.error('Failed to request the upload. Cause: ' + JSON.stringify(err));
  })
  ```


## request.upload

upload(config: UploadConfig, callback: AsyncCallback&lt;UploadTask&gt;): void

上传,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Upload

109 110 111
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
112
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
113 114
  | config | [UploadConfig](#uploadconfig) | 是 | 上传的配置信息。 |
  | callback | AsyncCallback&lt;[UploadTask](#uploadtask)&gt; | 否 | 回调函数,异步返回UploadTask对象。 |
Z
zengyawen 已提交
115

116
**示例:**
Z
zengyawen 已提交
117
  
118
  ```js
119
  let file1 = { filename: "test", name: "test", uri: "internal://cache/test.jpg", type: "jpg" };
120 121
  let data = { name: "name123", value: "123" };
  let header = { key1: value1, key2: value2 };
122
  let uploadTask;
123
  request.upload({ url: 'https://patch', header: header, method: "POST", files: [file1], data: [data] }, (err, data) => {
Z
zengyawen 已提交
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
      if (err) {
          console.error('Failed to request the upload. Cause: ' + JSON.stringify(err));
          return;
      }
      uploadTask = data;
  });
  ```


## UploadTask

上传任务,使用下列方法前,需要先获取UploadTask对象。


### on('progress')

Z
zengyawen 已提交
140
on(type: 'progress', callback:(uploadedSize: number, totalSize: number) =&gt; void): void
Z
zengyawen 已提交
141 142 143 144 145 146 147

开启上传任务监听,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Upload

148 149 150
**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
151
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
152 153
  | type | string | 是 | 订阅的事件类型,取值为'progress'(上传的进度信息)。 |
  | callback | function | 是 | 上传进度的回调函数。 |
Z
zengyawen 已提交
154

155
  回调函数的参数
Z
zengyawen 已提交
156

157 158 159 160
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| uploadedSize | number | 是 | 当前已上传文件大小,单位为KB。 |
| totalSize | number | 是 | 上传文件的总大小,单位为KB。 |
Z
zengyawen 已提交
161

162
**示例:**
Z
zengyawen 已提交
163
  
164
  ```js
Z
zengyawen 已提交
165
  uploadTask.on('progress', function callback(uploadedSize, totalSize) {
Z
zengyawen 已提交
166 167
      console.info("upload totalSize:" + totalSize + "  uploadedSize:" + uploadedSize);
  }
Z
zengyawen 已提交
168
  );
Z
zengyawen 已提交
169 170 171 172 173
  ```


### on('headerReceive')<sup>7+</sup>

Z
zengyawen 已提交
174
on(type: 'headerReceive', callback:  (header: object) =&gt; void): void
Z
zengyawen 已提交
175 176 177 178 179 180 181

开启上传任务监听,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Upload

182 183 184
**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
185
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
186
  | type | string | 是 | 订阅的事件类型,取值为'headerReceive'(接收响应头)。 |
Z
zengyawen 已提交
187
  | callback | function | 是 | HTTP&nbsp;Response&nbsp;Header事件的回调函数。 |
Z
zengyawen 已提交
188 189 190

  回调函数的参数:

191 192 193
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| header | object | 是 | HTTP&nbsp;Response&nbsp;Header。 |
Z
zengyawen 已提交
194

195
**示例:**
Z
zengyawen 已提交
196
  
197
  ```js
Z
zengyawen 已提交
198
  uploadTask.on('headerReceive', function callback(headers){   
Z
zengyawen 已提交
199 200
      console.info("upOnHeader headers:" + JSON.stringify(headers));
  }
Z
zengyawen 已提交
201
  );
Z
zengyawen 已提交
202 203 204 205 206
  ```


### off('progress')

Z
zengyawen 已提交
207
off(type:  'progress',  callback?: (uploadedSize: number, totalSize: number) =&gt;  void): void
Z
zengyawen 已提交
208 209 210 211 212 213 214

关闭上传任务监听,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Upload

215 216 217
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
218
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
219 220
  | type | string | 是 | 取消订阅的事件类型,取值为'progress'(上传的进度信息)。 |
  | callback | function | 否 | 上传任务的回调函数。 |
Z
zengyawen 已提交
221 222 223

  回调函数的参数:

224 225 226 227
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| uploadedSize | number | 是 | 当前已上传文件的大小,单位为KB。 |
| totalSize | number | 是 | 上传文件的总大小,单位为KB。 |
Z
zengyawen 已提交
228

229
**示例:**
Z
zengyawen 已提交
230
  
231
  ```js
Z
zengyawen 已提交
232
  uploadTask.off('progress', function callback(uploadedSize, totalSize) {
Z
zengyawen 已提交
233 234
      console.info('uploadedSize: ' + uploadedSize, 'totalSize: ' + totalSize);
  }
Z
zengyawen 已提交
235
  );
Z
zengyawen 已提交
236 237 238 239 240
  ```


### off('headerReceive')<sup>7+</sup>

Z
zengyawen 已提交
241
off(type: 'headerReceive', callback?: (header: object) =&gt; void): void
Z
zengyawen 已提交
242 243 244 245 246 247 248

关闭上传任务监听,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Upload

249 250 251
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
252
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
253
  | type | string | 是 | 取消订阅的事件类型,取值为'headerReceive'(接收响应头)。 |
Z
zengyawen 已提交
254
  | callback | function | 否 | HTTP&nbsp;Response&nbsp;Header事件的回调函数。 |
Z
zengyawen 已提交
255 256 257

  回调函数的参数:

258 259 260
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| header | object | 是 | HTTP&nbsp;Response&nbsp;Header。 |
Z
zengyawen 已提交
261

262
**示例:**
Z
zengyawen 已提交
263
  
264
  ```js
Z
zengyawen 已提交
265
  uploadTask.off('headerReceive', function callback(headers) {
Z
zengyawen 已提交
266 267
      console.info("upOnHeader headers:" + JSON.stringify(headers));
  }
Z
zengyawen 已提交
268
  );
Z
zengyawen 已提交
269 270 271 272 273 274 275 276 277 278 279 280 281
  ```


### remove

remove(): Promise&lt;boolean&gt;

移除上传的任务,异步方法,使用promise形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Upload

282 283 284
**返回值:**

  | 类型 | 说明 |
Z
zengyawen 已提交
285
  | -------- | -------- |
Z
zengyawen 已提交
286
  | Promise&lt;boolean&gt; | 移除任务是否成功。true:成功,false:不成功。 |
Z
zengyawen 已提交
287

288
**示例:**
Z
zengyawen 已提交
289
  
290
  ```js
Z
zengyawen 已提交
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312
  uploadTask.remove().then((result) => {
      if (result) {
          console.info('Upload task removed successfully. ');
      } else {
          console.error('Failed to remove the upload task. ');
      }
  }).catch((err) => {
      console.error('Failed to remove the upload task. Cause: ' + JSON.stringify(err));
  });
  ```


### remove

remove(callback: AsyncCallback&lt;boolean&gt;): void

移除上传的任务,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Upload

313 314 315
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
316
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
317
  | callback | AsyncCallback&lt;boolean&gt; | 是 | 移除任务的回调函数。 |
Z
zengyawen 已提交
318

319
**示例:**
Z
zengyawen 已提交
320
  
321
  ```js
Z
zengyawen 已提交
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339
  uploadTask.remove((err, result) => {
      if (err) {
          console.error('Failed to remove the upload task. Cause: ' + JSON.stringify(err));
          return;
      }
      if (result) {
          console.info('Upload task removed successfully.');
      } else {
          console.error('Failed to remove the upload task.');
      }
  });
  ```


## UploadConfig

**系统能力**: 以下各项对应的系统能力均为SystemCapability.MiscServices.Upload。

Z
zengyawen 已提交
340
| 名称 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
341
| -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
342 343 344 345 346
| url | string | 是 | 资源地址。 |
| header | object | 否 | 添加要包含在上载请求中的HTTP或HTTPS标志头。 |
| method | string | 否 | 请求方法:POST、PUT。缺省为POST。 |
| files | Array&lt;[File](#file)&gt; | 是 | 要上传的文件列表。请使用&nbsp;multipart/form-data提交。 |
| data | Array&lt;[RequestData](#requestdata)&gt; | 否 | 请求的表单数据。 |
Z
zengyawen 已提交
347 348 349 350 351 352


## File

**系统能力**: 以下各项对应的系统能力均为SystemCapability.MiscServices.Upload。

Z
zengyawen 已提交
353
| 名称 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
354
| -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
355 356
| filename | string | 否 | multipart提交时,请求头中的文件名。 |
| name | string | 否 | multipart提交时,表单项目的名称,缺省为file。 |
Z
zengyawen 已提交
357
| uri | string | 是 | 文件的本地存储路径。<br/>支持“dataability”和“internal”两种协议类型,但“internal”仅支持临时目录,示例:<br/>dataability:///com.domainname.dataability.persondata/person/10/file.txt<br/>internal://cache/path/to/file.txt |
Z
zengyawen 已提交
358
| type | string | 否 | 文件的内容类型,默认根据文件名或路径的后缀获取。 |
Z
zengyawen 已提交
359 360 361 362 363 364


## RequestData

**系统能力**: 以下各项对应的系统能力均为SystemCapability.MiscServices.Upload。

Z
zengyawen 已提交
365
| 名称 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
366
| -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
367 368
| name | string | 是 | 表示表单元素的名称。 |
| value | string | 是 | 表示表单元素的值。 |
Z
zengyawen 已提交
369 370 371 372 373 374 375 376 377 378 379 380


## request.download

download(config: DownloadConfig): Promise&lt;DownloadTask&gt;

下载,异步方法,使用promise形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

381 382 383
**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
384
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
385
  | config | [DownloadConfig](#downloadconfig) | 是 | 下载的配置信息。 |
Z
zengyawen 已提交
386

387 388 389
**返回值:**

  | 类型 | 说明 |
Z
zengyawen 已提交
390
  | -------- | -------- |
Z
zengyawen 已提交
391
  | Promise&lt;[DownloadTask](#downloadtask)&gt; | 返回下载任务。 |
Z
zengyawen 已提交
392

393
**示例:**
Z
zengyawen 已提交
394
  
395
  ```js
396
  let downloadTask;
Z
zengyawen 已提交
397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414
  request.download({ url: 'https://xxxx/xxxx.hap' }).then((data) => {
      downloadTask = data;
  }).catch((err) => {
      console.error('Failed to request the download. Cause: ' + JSON.stringify(err));
  })
  ```


## request.download

download(config: DownloadConfig, callback: AsyncCallback&lt;DownloadTask&gt;): void

下载,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

415 416 417
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
418
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
419 420
  | config | [DownloadConfig](#downloadconfig) | 是 | 下载的配置信息。 |
  | callback | AsyncCallback&lt;[DownloadTask](#downloadtask)&gt; | 否 | 下载接口的回调函数。 |
Z
zengyawen 已提交
421

422
**示例:**
Z
zengyawen 已提交
423
  
424
  ```js
425
  let downloadTask;
Z
zengyawen 已提交
426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443
  request.download({ url: 'https://xxxx/xxxxx.hap', 
  filePath: 'xxx/xxxxx.hap'}, (err, data) => {
      if (err) {
          console.error('Failed to request the download. Cause: ' + JSON.stringify(err));
          return;
      }
      downloadTask = data;
  });
  ```


## DownloadTask

下载任务。


### on('progress')

Z
zengyawen 已提交
444
on(type: 'progress', callback:(receivedSize: number, totalSize: number) =&gt; void): void
Z
zengyawen 已提交
445 446 447 448 449 450 451

开启下载任务监听,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

452 453 454
**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
455
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
456 457
  | type | string | 是 | 订阅的事件类型,取值为'progress'(下载的进度信息)。 |
  | callback | function | 是 | 下载的回调函数。 |
Z
zengyawen 已提交
458 459 460

  回调函数的参数:

461 462 463 464
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| receivedSize | number | 是 | 当前下载的进度,单位为KB。 |
| totalSize | number | 是 | 下载文件的总大小,单位为KB。 |
Z
zengyawen 已提交
465

466
**示例:**
Z
zengyawen 已提交
467
  
468
  ```js
Z
zengyawen 已提交
469
      downloadTask.on('progress', function download_callback(receivedSize, totalSize) {
Z
zengyawen 已提交
470 471
      console.info("download receivedSize:" + receivedSize + " totalSize:" + totalSize);
  }
Z
zengyawen 已提交
472 473
  );
  });
Z
zengyawen 已提交
474 475 476 477 478
  ```


### off('progress')

Z
zengyawen 已提交
479
off(type: 'progress', callback?: (receivedSize: number, totalSize: number) =&gt; void): void
Z
zengyawen 已提交
480 481 482 483 484 485 486

关闭下载任务监听,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

487 488 489
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
490
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
491 492
  | type | string | 是 | 取消订阅的事件类型,取值为'progress'(下载的进度信息)。 |
  | callback | function | 否 | 下载任务的回调函数。 |
Z
zengyawen 已提交
493 494 495

  回调函数的参数:

496 497 498 499
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| receivedSize | number | 是 | 当前下载的进度。 |
| totalSize | number | 是 | 下载文件的总大小。 |
Z
zengyawen 已提交
500

501
**示例:**
Z
zengyawen 已提交
502
  
503
  ```js
Z
zengyawen 已提交
504 505 506 507
      downloadTask .off('progress', function download_callback(receivedSize, totalSize) {
          console.info("download receivedSize:" + receivedSize + " totalSize:" + totalSize);
      }
  );
Z
zengyawen 已提交
508 509 510 511
  });
  ```


Z
zengyawen 已提交
512
### on('complete'|'pause'|'remove')<sup>7+</sup>
Z
zengyawen 已提交
513

Z
zengyawen 已提交
514
on(type: 'complete'|'pause'|'remove', callback:() =&gt; void): void
Z
zengyawen 已提交
515

Z
zengyawen 已提交
516
开启下载任务相关的监听,异步方法,使用callback形式返回。
Z
zengyawen 已提交
517 518 519 520 521

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

522 523 524
**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
525
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
526 527
  | type | string | 是 | 订阅的事件类型。<br>- 取值为'complete',表示下载任务完成;<br/>- 取值为'pause',表示下载任务暂停;<br/>- 取值为'remove',表示下载任务移除。 |
  | callback | function | 是 | 回调函数。 |
Z
zengyawen 已提交
528

529
**示例:**
Z
zengyawen 已提交
530
  
531
  ```js
Z
zengyawen 已提交
532 533 534 535
      downloadTask.on('complete', function callback() {
          console.info('Download task completed.');
      }
  );
Z
zengyawen 已提交
536 537 538 539
  });
  ```


Z
zengyawen 已提交
540
### off('complete'|'pause'|'remove')<sup>7+</sup>
Z
zengyawen 已提交
541

Z
zengyawen 已提交
542
off(type: 'complete'|'pause'|'remove', callback?:() =&gt; void): void
Z
zengyawen 已提交
543

Z
zengyawen 已提交
544
取消下载任务相关的监听,异步方法,使用callback形式返回。
Z
zengyawen 已提交
545 546 547 548 549

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

550 551 552
**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
553
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
554 555
  | type | string | 是 | 取消订阅的事件类型。<br/>- 取值为'complete',表示下载任务完成;<br/>- 取值为'pause',表示下载任务暂停;<br/>- 取值为'remove',表示下载任务移除。 |
  | callback | function | 否 | 回调函数。 |
Z
zengyawen 已提交
556

557
**示例:**
Z
zengyawen 已提交
558
  
559
  ```js
Z
zengyawen 已提交
560 561 562 563
      downloadTask.off('complete', function callback() {
          console.info('Download task completed.');
      }
  );
Z
zengyawen 已提交
564 565 566 567 568 569
  }); 
  ```


### on('fail')<sup>7+</sup>

Z
zengyawen 已提交
570
on(type: 'fail', callback: (err: number) =&gt; void): void
Z
zengyawen 已提交
571 572 573 574 575 576 577

开启下载任务失败监听,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

578 579 580
**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
581
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
582 583
  | type | string | 是 | 订阅的事件类型,取值为'fail'(下载失败)。 |
  | callback | function | 是 | 下载失败的回调函数。 |
Z
zengyawen 已提交
584 585 586

  回调函数的参数:

587 588 589
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| err | number | 是 | 下载失败的错误码,错误原因见[ERROR.*](#常量)。 |
Z
zengyawen 已提交
590

591
**示例:**
Z
zengyawen 已提交
592
  
593
  ```js 
Z
zengyawen 已提交
594 595 596 597
      downloadTask.on('fail', function callBack(err) {
          console.info('Download task failed. Cause:' + err);
      }
  );
Z
zengyawen 已提交
598 599 600 601 602 603
  });
  ```


### off('fail')<sup>7+</sup>

Z
zengyawen 已提交
604
off(type: 'fail', callback?: (err: number) =&gt; void): void
Z
zengyawen 已提交
605 606 607 608 609 610 611

取消下载任务失败监听,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

612 613 614
**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
615
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
616 617
  | type | string | 是 | 取消订阅的事件类型,取值为'fail'(下载失败)。 |
  | callback | function | 否 | 取消下载失败的回调函数。 |
Z
zengyawen 已提交
618 619 620

  回调函数的参数

621 622 623
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| err | number | 是 | 下载失败的错误码。错误原因见[ERROR_*](#常量)。 |
Z
zengyawen 已提交
624

625
**示例:**
Z
zengyawen 已提交
626
  
627
  ```js
Z
zengyawen 已提交
628 629 630 631
      downloadTask.off('fail', function callBack(err) {
          console.info('Download task failed. Cause:' + err);
      } 
  );
Z
zengyawen 已提交
632 633 634 635 636 637 638 639 640 641 642 643 644 645
  });
  ```


### remove

remove(): Promise&lt;boolean&gt;

移除下载的任务,异步方法,使用promise形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

646 647 648
**返回值:**

  | 类型 | 说明 |
Z
zengyawen 已提交
649
  | -------- | -------- |
Z
zengyawen 已提交
650
  | Promise&lt;boolean&gt; | 移除任务是否成功。 |
Z
zengyawen 已提交
651

652
**示例:**
Z
zengyawen 已提交
653
  
654
  ```js
Z
zengyawen 已提交
655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676
  downloadTask.remove().then((result) => {
      if (result) {
          console.info('Download task removed.');
      } else {
          console.error('Failed to remove the download task.');
      }
  }).catch ((err) => {
      console.error('Failed to remove the download task.');
  });
  ```


### remove

remove(callback: AsyncCallback&lt;boolean&gt;): void

移除下载的任务,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

677 678 679
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
680
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
681
  | callback | AsyncCallback&lt;boolean&gt; | 是 | 移除任务是否成功。 |
Z
zengyawen 已提交
682

683
**示例:**
Z
zengyawen 已提交
684
  
685
  ```js
Z
zengyawen 已提交
686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709
  downloadTask.remove((err, result)=>{
      if(err) {
          console.error('Failed to remove the download task.');
          return;
      } 
      if (result) {
          console.info('Download task removed.');
      } else {
          console.error('Failed to remove the download task.');
      } 
  });
  ```


### query<sup>7+</sup>

query(): Promise&lt;DownloadInfo&gt;

查询下载任务,异步方法,使用promise形式返回DownloadInfo里的信息。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

710
**参数:**
Z
zengyawen 已提交
711
    | 类型 | 说明 |
Z
zengyawen 已提交
712
  | -------- | -------- |
Z
zengyawen 已提交
713
  | Promise&lt;[DownloadInfo](#downloadinfo7)&gt; | 查询下载任务信息。 |
Z
zengyawen 已提交
714

715
**示例:**
Z
zengyawen 已提交
716
  
717
  ```js
Z
zengyawen 已提交
718
  downloadTask.query().then((downloadInfo) => {    
Z
zengyawen 已提交
719
      console.info('Download task queried. Data:' + JSON.stringify(downloadInfo))
Z
zengyawen 已提交
720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735
  }) .catch((err) => {
      console.error('Failed to query the download task. Cause:' + err)
  });
  ```


### query<sup>7+</sup>

query(callback: AsyncCallback&lt;DownloadInfo&gt;): void

查询下载的任务,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

736 737 738
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
739
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
740
  | callback | AsyncCallback&lt;[DownloadInfo](#downloadinfo7)&gt; | 是 | 查询下载任务的回调函数。 |
Z
zengyawen 已提交
741

742
**示例:**
Z
zengyawen 已提交
743
  
744
  ```js
Z
zengyawen 已提交
745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764
  downloadTask.query((err, downloadInfo)=>{
      if(err) {
          console.error('Failed to query the download mimeType. Cause:' + JSON.stringify(err));
      } else {
          console.info('download query success. data:'+ JSON.stringify(downloadInfo));
      }
  });
  ```


### queryMimeType<sup>7+</sup>

queryMimeType(): Promise&lt;string&gt;

查询下载的任务的 MimeType,异步方法,使用promise形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

765 766 767
**返回值:**

  | 类型 | 说明 |
Z
zengyawen 已提交
768
  | -------- | -------- |
Z
zengyawen 已提交
769
  | Promise&lt;string&gt; | 查询下载任务的MimeType。 |
Z
zengyawen 已提交
770

771
**示例:**
Z
zengyawen 已提交
772
  
773
  ```js
Z
zengyawen 已提交
774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791
  downloadTask.queryMimeType().then((data) => {    
      console.info('Download task queried. Data:' + JSON.stringify(data));
  }).catch((err) => {
      console.error('Failed to query the download MimeType. Cause:' + JSON.stringify(err))
  });
  ```


### queryMimeType<sup>7+</sup>

queryMimeType(callback: AsyncCallback&lt;string&gt;): void;

查询下载的任务的 MimeType,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

792 793 794
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
795
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
796
  | callback | AsyncCallback&lt;string&gt; | 是 | 查询下载任务的MimeType的回调函数。 |
Z
zengyawen 已提交
797

798
**示例:**
Z
zengyawen 已提交
799
  
800
  ```js
Z
zengyawen 已提交
801 802 803 804 805 806 807 808 809 810 811 812
  downloadTask.queryMimeType((err, data)=>{
      if(err) {
          console.error('Failed to query the download mimeType. Cause:' + JSON.stringify(err));
      } else {
          console.info('Download task queried. data:' + JSON.stringify(data));
      }
  });
  ```


### pause<sup>7+</sup>

Z
zengyawen 已提交
813
pause(): Promise&lt;void&gt;
Z
zengyawen 已提交
814 815 816 817 818 819 820

暂停下载任务,异步方法,使用promise形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

821 822 823
**返回值:**

  | 类型 | 说明 |
Z
zengyawen 已提交
824
  | -------- | -------- |
Z
zengyawen 已提交
825
  | Promise&lt;void&gt; | 暂停下载任务是否成功。 |
Z
zengyawen 已提交
826

827
**示例:**
Z
zengyawen 已提交
828
  
829
  ```js
Z
zengyawen 已提交
830 831 832 833 834 835 836 837 838 839 840 841 842 843
  downloadTask.pause().then((result) => {    
      if (result) {
           console.info('Download task paused. ');
      } else {
          console.error('Failed to pause the download task. Cause:' + JSON.stringify(result));
      }
  }).catch((err) => {
      console.error('Failed to pause the download task. Cause:' + JSON.stringify(err));
  });
  ```


### pause<sup>7+</sup>

Z
zengyawen 已提交
844
pause(callback: AsyncCallback&lt;void&gt;): void
Z
zengyawen 已提交
845 846 847 848 849 850 851

暂停下载任务,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

852 853 854
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
855
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
856
  | callback | AsyncCallback&lt;void&gt; | 是 | 暂停下载任务的回调函数。 |
Z
zengyawen 已提交
857

858
**示例:**
Z
zengyawen 已提交
859
  
860
  ```js
Z
zengyawen 已提交
861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876
  downloadTask.pause((err, result)=>{
      if(err) {
          console.error('Failed to pause the download task. Cause:' + JSON.stringify(err));
          return;
      }
      if (result) {
           console.info('Download task paused. ');
      } else {
          console.error('Failed to pause the download task. Cause:' + JSON.stringify(result));
      }
  });
  ```


### resume<sup>7+</sup>

Z
zengyawen 已提交
877
resume(): Promise&lt;void&gt;
Z
zengyawen 已提交
878 879 880 881 882 883 884

重新启动暂停的下载任务,异步方法,使用promise形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

885 886 887
**参数:**

  | 类型 | 说明 |
Z
zengyawen 已提交
888
  | -------- | -------- |
Z
zengyawen 已提交
889
  | Promise&lt;void&gt; | 重新启动暂停的下载任务是否成功。 |
Z
zengyawen 已提交
890

891
**示例:**
Z
zengyawen 已提交
892
  
893
  ```js
Z
zengyawen 已提交
894 895 896 897 898 899 900 901 902 903 904 905 906 907 908
  downloadTask.resume().then((result) => {
      if (result) {
          console.info('Download task resumed.')
      } else {
          console.error('Failed to resume the download task. ');
      }
      console.info('Download task resumed.')
  }).catch((err) => {
      console.error('Failed to resume the download task. Cause:' + err);
  });
  ```


### resume<sup>7+</sup>

Z
zengyawen 已提交
909
resume(callback: AsyncCallback&lt;void&gt;): void
Z
zengyawen 已提交
910 911 912 913 914 915 916

重新启动暂停的下载任务,异步方法,使用callback形式返回结果。

**需要权限**:ohos.permission.INTERNET

**系统能力**: SystemCapability.MiscServices.Download

917 918 919
**参数:**

  | 参数名 | 参数类型 | 必填 | 说明 |
Z
zengyawen 已提交
920
  | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
921
  | callback | AsyncCallback&lt;void&gt; | 是 | 重新启动暂停的下载任务的回调函数。 |
Z
zengyawen 已提交
922

923
**示例:**
Z
zengyawen 已提交
924
  
925
  ```js
Z
zengyawen 已提交
926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950
  downloadTask.resume((err, result)=>{
      if (err) {
          console.error('Failed to resume the download task. Cause:' + err);
          return;
      } 
      if (result) {
          console.info('Download task resumed.');
      } else {
          console.error('Failed to resume the download task.');
      }
  });
  ```


## DownloadConfig

**系统能力**: SystemCapability.MiscServices.Download

| 名称 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| url | string | 是 | 资源地址。 |
| header | object | 否 | 添加要包含在下载请求中的HTTP或HTTPS标志头。 |
| enableMetered | boolean | 否 | 允许在按流量计费的连接下下载。 |
| enableRoaming | boolean | 否 | 允许在漫游网络中下载。 |
| description | string | 否 | 设置下载会话的描述。 |
951
| filePath<sup>7+</sup> | string | 否 | 设置下载路径(默认在'internal://cache/'路径下)。<br/>-&nbsp;filePath:'workspace/test.txt':默认路径下创建workspace路径,并将文件存储在workspace路径下。<br/>-&nbsp;filePath:'test.txt':将文件存储在默认路径下。<br/>-&nbsp;filePath:'workspace/':默认路径下创建workspace路径,并将文件存储在workspace路径下。 |
Z
zengyawen 已提交
952 953 954 955
| networkType | number | 否 | 设置允许下载的网络类型。 |
| title | string | 否 | 设置下载会话标题。 |


Z
zengyawen 已提交
956
## DownloadInfo<sup>7+</sup>
Z
zengyawen 已提交
957 958 959

**系统能力**: SystemCapability.MiscServices.Download

Z
zengyawen 已提交
960
| 名称 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
961
| -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
962 963 964 965 966 967 968 969 970 971 972
| downloadId | number | 是 | 下载的文件ID。 |
| failedReason | number | 否 | 下载失败原因,可以是任何[ERROR_*](#常量)常量。 |
| fileName | string | 是 | 下载的文件名。 |
| filePath | string | 是 | 存储文件的URI。 |
| pausedReason | number | 否 | 会话暂停的原因,可以是任何[PAUSED_*](#常量)常量。 |
| status | number | 是 | 下载状态代码,可以是任何[SESSION_*](#常量)常量。 |
| targetURI | string | 是 | 下载文件的URI。 |
| downloadTitle | string | 是 | 下载的文件的标题。 |
| downloadTotalBytes | number | 是 | 下载的文件的总大小(int&nbsp;bytes)。 |
| description | string | 是 | 待下载文件的描述信息。 |
| downloadedBytes | number | 是 | 实时下载大小(int&nbsp;&nbsp;bytes)。 |