# 12.3:文件上传下载

ArkUI开发框架在 @ohos.request 模块中提供了文件的上传和下载功能相关 API ,本节笔者简单介绍一下文件上传下载相关的使用。

# 12.3.1:限制与约束

  • 发起http网络请求需要申请 ohos.permission.INTERNET 权限。

  • 发起http网络请求限定并发个数为 100 ,超过这一限制的后续请求会失败。

  • 默认支持 https,如果要支持 http ,需要在 config.json 里增加 network 标签,属性标识 "cleartextTraffic": true。

    {
      "deviceConfig": {
        "default": {
          "network": {
            "cleartextTraffic": true
          }
          ...
        }
      }
      ...
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

# 12.3.2:request模块介绍

declare namespace request {
  // 文件上传
  function download(config: DownloadConfig, callback: AsyncCallback<DownloadTask>): void;
  // 文件下载
  function upload(config: UploadConfig, callback: AsyncCallback<UploadTask>): void;

  // 省略部分API
}

export default request;
1
2
3
4
5
6
7
8
9
10

@ohos.request 模块定义了 download() 文件下载和 upload() 文件上传方法,接下来分别演示一下它们的用法。

# 12.3.3:文件上传

// request模块
declare namespace request {
  // 文件上传
  function upload(config: UploadConfig, callback: AsyncCallback<UploadTask>): void;
  
  // 省略其他API

  // 上传参数配置
  interface UploadConfig {
    url: string;
    header: Object;
    method: string;
    files: Array<File>;
    data: Array<RequestData>;
  }

  // 上传文件
  interface File {
    filename: string;
    name: string;
    uri: string;
    type: string;
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

UploadConfig 参数说明如下:

  • url:资源地址。
  • header:添加要包含在上载请求中的 HTTP 或 HTTPS 标志头。
  • method:请求方法:POST、PUT,缺省为POST。
  • files:要上传的文件列表,请使用 multipart/form-data提交。
  • data:请求的表单数据。

File参数说明如下:

  • filename:multipart提交时,请求头中的文件名。
  • name:multipart提交时,表单项目的名称,缺省为file。
  • url:文件的本地存储路径。支持“dataability”和“internal”两种协议类型。
  • type:文件的内容类型,默认根据文件名或路径的后缀获取。

简单样例如下所示:

private upload(filePath: string) {
  request.upload({
    url: "https://www.example.com/upload", // 上传地址
    files: [                               // 上传文件集合
      {
        name: "test",                      // 文件名称
        filename: "test",                  // 文件名称
        uri: filePath                      // 文件本地路径
      }
    ],
    method: "POST",                        // POST上传
    header: {},                            // 可以添加Header
    data: [                                // 请求表单数据
      {
        name: "test",
        value: "value"
      }
    ]
  }, (error, data) => {
    if(data) {
      // 监听上传进度
      data.on('progress', (uploadedSize: number, totalSize: number) => {
        console.log("progress, uploadedSize: " + uploadedSize + ", totalSize: " + totalSize)
      })
    }
  })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 12.3.4:文件下载

// request模块
declare namespace request {
  // 文件下载
  function download(config: DownloadConfig, callback: AsyncCallback<DownloadTask>): void;
  
  // 省略其他API
}

interface DownloadConfig {
  url: string;
  header?: Object;
  enableMetered?: boolean;
  enableRoaming?: boolean;
  description?: string;
  networkType?: number;
  filePath?: string;
  title?: string;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

DownloadConfig 参数说明如下:

  • url:资源地址。
  • header:添加要包含在下载请求中的 HTTP 或 HTTPS 标志头。
  • enableMetered:允许在按流量计费的连接下下载。
  • enableRoaming:允许在漫游网络中下载。
  • description:设置下载会话的描述。
  • filePath:设置下载路径。
  • networkType:设置允许下载的网络类型。
  • title:设置下载会话标题。

简单样例如下所示:

private download(filePath: string) {
  request.download({
    url: "https://www.example.com/files.zip", // 下载地址
    header: {},                               // 下载请求Header
    enableMetered: true,                      // 允许下载
    enableRoaming: true,                      // 允许下载
    filePath: filePath,                       // 本地文件路径
    networkType: request.NETWORK_WIFI         // WIFI网络下载
  }, (error, data) => {
    if(data) {
      // 监听进度事件
      data.on("progress", (receivedSize: number, totalSize: number) => {
        console.log("progress: " + receivedSize + ", totalSize: " + totalSize);
      })
      // 监听完成事件
      data.on("complete", () => {
        console.log("complete");
      })
    }
  })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 12.3.5:小结

本节简单介绍了文件的上传下载操作,笔者条件有限,暂时没有真机和开发板验证该功能,仅是参考 API 的说明手写的代码,待后续笔者可以验证了,再一并上传截图,如果读者有开发板,非常欢迎帮助笔者验证一下文件上传下载的功能,十分感谢!

(adsbygoogle = window.adsbygoogle || []).push({});
请作者喝杯咖啡

津公网安备 12011402001367号

津ICP备2020008934号-2