js-apis-request.md 28.5 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
默认支持https,如果要支持http,需要在config.json里增加network标签,属性标识 "cleartextTraffic": true。即:

```
21
var config = {
Z
zengyawen 已提交
22 23 24
  "deviceConfig": {
    "default": {
      "network": {
A
anyueling 已提交
25
        "cleartextTraffic": true
Z
zengyawen 已提交
26
      }
27
      //...
Z
zengyawen 已提交
28
    }
Z
zengyawen 已提交
29
  }
30
}
Z
zengyawen 已提交
31
```
Z
zengyawen 已提交
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 72 73


## 常量

**需要权限**: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

74 75 76
**参数:**

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

80 81 82
**返回值:**

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

86
**示例:**
Z
zengyawen 已提交
87
  
88
  ```js
89
  let file1 = { filename: "test", name: "test", uri: "internal://cache/test.jpg", type: "jpg" };
90
  let data = { name: "name123", value: "123" };
91
  let header = { key1: "value1", key2: "value2" };
92
  let uploadTask;
93
  request.upload({ url: 'https://patch', header: header, method: "POST", files: [file1], data: [data] }).then((data) => {
Z
zengyawen 已提交
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
      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

111 112 113
**参数:**

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

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


## UploadTask

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


### on('progress')

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

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

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

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

150 151 152
**参数:**

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

157
  回调函数的参数
Z
zengyawen 已提交
158

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

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


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

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

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

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

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

184 185 186
**参数:**

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

  回调函数的参数:

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

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


### off('progress')

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

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

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

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

217 218 219
**参数:**

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

  回调函数的参数:

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

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


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

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

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

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

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

251 252 253
**参数:**

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

  回调函数的参数:

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

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


### remove

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

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

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

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

284 285 286
**返回值:**

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

290
**示例:**
Z
zengyawen 已提交
291
  
292
  ```js
Z
zengyawen 已提交
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
  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

315 316 317
**参数:**

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

321
**示例:**
Z
zengyawen 已提交
322
  
323
  ```js
Z
zengyawen 已提交
324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341
  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 已提交
342
| 名称 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
343
| -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
344
| url | string | 是 | 资源地址。 |
345 346
| header | object | 是 | 添加要包含在上载请求中的HTTP或HTTPS标志头。 |
| method | string | 是 | 请求方法:POST、PUT。缺省为POST。 |
Z
zengyawen 已提交
347
| files | Array&lt;[File](#file)&gt; | 是 | 要上传的文件列表。请使用&nbsp;multipart/form-data提交。 |
348
| data | Array&lt;[RequestData](#requestdata)&gt; | 是 | 请求的表单数据。 |
Z
zengyawen 已提交
349 350 351 352 353 354


## File

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

Z
zengyawen 已提交
355
| 名称 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
356
| -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
357 358
| filename | string | 否 | multipart提交时,请求头中的文件名。 |
| name | string | 否 | multipart提交时,表单项目的名称,缺省为file。 |
Z
zengyawen 已提交
359
| 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 已提交
360
| type | string | 否 | 文件的内容类型,默认根据文件名或路径的后缀获取。 |
Z
zengyawen 已提交
361 362 363 364 365 366


## RequestData

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

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


## request.download

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

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

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

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

383 384 385
**参数:**

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

389 390 391
**返回值:**

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

395
**示例:**
Z
zengyawen 已提交
396
  
397
  ```js
398
  let downloadTask;
Z
zengyawen 已提交
399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416
  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

417 418 419
**参数:**

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

424
**示例:**
Z
zengyawen 已提交
425
  
426
  ```js
427
  let downloadTask;
Z
zengyawen 已提交
428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445
  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 已提交
446
on(type: 'progress', callback:(receivedSize: number, totalSize: number) =&gt; void): void
Z
zengyawen 已提交
447 448 449 450 451 452 453

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

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

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

454 455 456
**参数:**

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

  回调函数的参数:

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

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


### off('progress')

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

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

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

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

488 489 490
**参数:**

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

  回调函数的参数:

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

502
**示例:**
Z
zengyawen 已提交
503
  
504
  ```js
505 506 507
  downloadTask .off('progress', function download_callback(receivedSize, totalSize) {
      console.info("download receivedSize:" + receivedSize + " totalSize:" + totalSize);
  }
Z
zengyawen 已提交
508
  );
Z
zengyawen 已提交
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
532 533 534
  downloadTask.on('complete', function callback() {
      console.info('Download task completed.');
  }
Z
zengyawen 已提交
535
  );
Z
zengyawen 已提交
536 537 538
  ```


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

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

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

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

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

549 550 551
**参数:**

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

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


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

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

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

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

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

576 577 578
**参数:**

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

  回调函数的参数:

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

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


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

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

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

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

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

609 610 611
**参数:**

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

  回调函数的参数

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

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


### remove

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

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

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

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

642 643 644
**返回值:**

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

648
**示例:**
Z
zengyawen 已提交
649
  
650
  ```js
Z
zengyawen 已提交
651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672
  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

673 674 675
**参数:**

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

679
**示例:**
Z
zengyawen 已提交
680
  
681
  ```js
Z
zengyawen 已提交
682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705
  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

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

711
**示例:**
Z
zengyawen 已提交
712
  
713
  ```js
Z
zengyawen 已提交
714
  downloadTask.query().then((downloadInfo) => {    
Z
zengyawen 已提交
715
      console.info('Download task queried. Data:' + JSON.stringify(downloadInfo))
Z
zengyawen 已提交
716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731
  }) .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

732 733 734
**参数:**

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

738
**示例:**
Z
zengyawen 已提交
739
  
740
  ```js
Z
zengyawen 已提交
741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760
  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

761 762 763
**返回值:**

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

767
**示例:**
Z
zengyawen 已提交
768
  
769
  ```js
Z
zengyawen 已提交
770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787
  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

788 789 790
**参数:**

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

794
**示例:**
Z
zengyawen 已提交
795
  
796
  ```js
Z
zengyawen 已提交
797 798 799 800 801 802 803 804 805 806 807 808
  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 已提交
809
pause(): Promise&lt;void&gt;
Z
zengyawen 已提交
810 811 812 813 814 815 816

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

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

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

817 818 819
**返回值:**

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

823
**示例:**
Z
zengyawen 已提交
824
  
825
  ```js
Z
zengyawen 已提交
826 827 828 829 830 831 832 833 834 835 836 837 838 839
  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 已提交
840
pause(callback: AsyncCallback&lt;void&gt;): void
Z
zengyawen 已提交
841 842 843 844 845 846 847

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

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

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

848 849 850
**参数:**

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

854
**示例:**
Z
zengyawen 已提交
855
  
856
  ```js
Z
zengyawen 已提交
857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872
  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 已提交
873
resume(): Promise&lt;void&gt;
Z
zengyawen 已提交
874 875 876 877 878 879 880

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

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

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

881 882 883
**参数:**

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

887
**示例:**
Z
zengyawen 已提交
888
  
889
  ```js
Z
zengyawen 已提交
890 891 892 893 894 895 896 897 898 899 900 901 902 903 904
  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 已提交
905
resume(callback: AsyncCallback&lt;void&gt;): void
Z
zengyawen 已提交
906 907 908 909 910 911 912

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

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

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

913 914 915
**参数:**

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

919
**示例:**
Z
zengyawen 已提交
920
  
921
  ```js
Z
zengyawen 已提交
922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946
  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 | 否 | 设置下载会话的描述。 |
947
| 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 已提交
948 949 950 951
| networkType | number | 否 | 设置允许下载的网络类型。 |
| title | string | 否 | 设置下载会话标题。 |


Z
zengyawen 已提交
952
## DownloadInfo<sup>7+</sup>
Z
zengyawen 已提交
953 954 955

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

Z
zengyawen 已提交
956
| 名称 | 类型 | 必填 | 说明 |
Z
zengyawen 已提交
957
| -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
958 959 960 961 962 963 964 965 966 967 968
| 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)。 |