# 12.3:文件上传下载
ArkUI开发框架在 @ohos.request
模块中提供了文件的上传和下载功能相关 API ,本节笔者简单介绍一下文件上传下载相关的使用。
# 12.3.1:限制与约束
DevEco Studio 的 预览器暂不支持网络请求,只能在模拟器或真机上进行。
发起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📢:DevEco Studio 的预览器暂时不支持网络请求,只能在模拟机或真机上进行。
# 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
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
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
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 12.3.5:小结
本节简单介绍了文件的上传下载操作,笔者条件有限,暂时没有真机和开发板验证该功能,仅是参考 API 的说明手写的代码,待后续笔者可以验证了,再一并上传截图,如果读者有开发板,非常欢迎帮助笔者验证一下文件上传下载的功能,十分感谢!
← 12.2:网络请求 12.4:Socket →
请作者喝杯咖啡
©arkui.club版权所有,禁止私自转发、克隆网站。