save-user-file.md 6.7 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4 5 6
# 保存用户文件

在从网络下载文件到本地、或将已有用户文件另存为新的文件路径等场景下,需要使用FilePicker提供的保存用户文件的能力。

对音频、图片、视频、文档类文件的保存操作类似,均通过调用对应picker的save()接口并传入对应的saveOptions来实现。

Y
yxn 已提交
7 8
save接口会将文件保存在文件管理器,而不是图库。

Z
zengyawen 已提交
9 10 11

## 保存图片或视频类文件

H
huweiqi 已提交
12
1. 导入选择器模块和文件管理模块。
Z
zengyawen 已提交
13

Z
zengyawen 已提交
14 15
   ```ts
   import picker from '@ohos.file.picker';
H
huweiqi 已提交
16
   import fs from '@ohos.file.fs';
Z
zengyawen 已提交
17 18 19
   ```

2. 创建图库保存选项实例。
Z
zengyawen 已提交
20

Z
zengyawen 已提交
21 22 23 24 25
   ```ts
   const photoSaveOptions = new picker.PhotoSaveOptions(); // 创建文件管理器保存选项实例
   photoSaveOptions.newFileNames = ["PhotoViewPicker01.jpg"]; // 保存文件名(可选)
   ```

H
huweiqi 已提交
26
3. 创建图库选择器实例,调用[save()](../reference/apis/js-apis-file-picker.md#save)接口拉起FilePicker界面进行文件保存。用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的uri。
H
huweiqi 已提交
27
   
H
huweiqi 已提交
28
   </br>save返回的uri权限是读写权限,可以根据结果集中uri进行文件读写等操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。
Z
zengyawen 已提交
29

Z
zengyawen 已提交
30
   ```ts
H
huweiqi 已提交
31
   let uri = null;
Z
zengyawen 已提交
32
   const photoViewPicker = new picker.PhotoViewPicker();
33
   photoViewPicker.save(photoSaveOptions).then((photoSaveResult) => {
H
huweiqi 已提交
34 35
     uri = photoSaveResult[0];
     console.info('photoViewPicker.save to file succeed and uri is:' + uri);
36
   }).catch((err) => {
H
huweiqi 已提交
37
     console.error(`Invoke photoViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
38 39 40
   })
   ```

H
huweiqi 已提交
41
4. 待界面从FilePicker返回后,再通过类似一个按钮调用其他函数,使用[fs.openSync](../reference/apis/js-apis-file-fs.md#fsopensync)接口,通过uri打开这个文件得到fd。这里需要注意接口权限参数是fs.OpenMode.READ_WRITE。
42 43

   ```ts
H
huweiqi 已提交
44
   let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
45 46 47
   console.info('file fd: ' + file.fd);
   ```

48
5. 通过fd使用[fs.writeSync](../reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改,编辑修改完成后关闭fd。
49 50 51 52 53

   ```ts
   let writeLen = fs.writeSync(file.fd, 'hello, world');
   console.info('write data to file succeed and size is:' + writeLen);
   fs.closeSync(file);
Z
zengyawen 已提交
54 55 56 57
   ```

## 保存文档类文件

H
huweiqi 已提交
58
1. 导入选择器模块和文件管理模块。
Z
zengyawen 已提交
59

Z
zengyawen 已提交
60 61
   ```ts
   import picker from '@ohos.file.picker';
H
huweiqi 已提交
62
   import fs from '@ohos.file.fs';
Z
zengyawen 已提交
63 64 65
   ```

2. 创建文档保存选项实例。
Z
zengyawen 已提交
66

Z
zengyawen 已提交
67 68 69 70 71
   ```ts
   const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器选项实例
   documentSaveOptions.newFileNames = ["DocumentViewPicker01.txt"]; // 保存文件名(可选)
   ```

H
huweiqi 已提交
72
3. 创建文档选择器实例。调用[save()](../reference/apis/js-apis-file-picker.md#save-3)接口拉起FilePicker界面进行文件保存。用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的uri。
H
huweiqi 已提交
73
   
H
huweiqi 已提交
74
   </br>save返回的uri权限是读写权限,可以根据结果集中uri进行文件读写等操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。
Z
zengyawen 已提交
75 76

   ```ts
H
huweiqi 已提交
77
   let uri = null;
Z
zengyawen 已提交
78
   const documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例
79
   documentViewPicker.save(documentSaveOptions).then((documentSaveResult) => {
H
huweiqi 已提交
80 81
     uri = documentSaveResult[0];
     console.info('documentViewPicker.save to file succeed and uri is:' + uri);
82
   }).catch((err) => {
H
huweiqi 已提交
83
     console.error(`Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
84 85 86
   })
   ```

H
huweiqi 已提交
87
4. 待界面从FilePicker返回后,再通过类似一个按钮调用其他函数,使用[fs.openSync](../reference/apis/js-apis-file-fs.md#fsopensync)接口,通过uri打开这个文件得到fd。这里需要注意接口权限参数是fs.OpenMode.READ_WRITE。
88 89

   ```ts
H
huweiqi 已提交
90
   let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
91 92 93
   console.info('file fd: ' + file.fd);
   ```

94
5. 通过fd使用[fs.writeSync](../reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改,编辑修改完成后关闭fd。
95 96 97 98 99

   ```ts
   let writeLen = fs.writeSync(file.fd, 'hello, world');
   console.info('write data to file succeed and size is:' + writeLen);
   fs.closeSync(file);
Z
zengyawen 已提交
100 101 102 103
   ```

## 保存音频类文件

H
huweiqi 已提交
104
1. 导入选择器模块和文件管理模块。
Z
zengyawen 已提交
105

Z
zengyawen 已提交
106 107
   ```ts
   import picker from '@ohos.file.picker';
H
huweiqi 已提交
108
   import fs from '@ohos.file.fs';
Z
zengyawen 已提交
109 110 111
   ```

2. 创建音频保存选项实例。
Z
zengyawen 已提交
112

Z
zengyawen 已提交
113 114 115 116 117
   ```ts
   const audioSaveOptions = new picker.AudioSaveOptions(); // 创建文件管理器选项实例
   audioSaveOptions.newFileNames = ['AudioViewPicker01.mp3']; // 保存文件名(可选)
   ```

H
huweiqi 已提交
118
3. 创建音频选择器实例。调用[save()](../reference/apis/js-apis-file-picker.md#save-6)接口拉起FilePicker界面进行文件保存。用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的uri。
H
huweiqi 已提交
119
   
H
huweiqi 已提交
120
   </br>save返回的uri权限是读写权限,可以根据结果集中uri进行文件读写等操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。
H
huweiqi 已提交
121
   
Z
zengyawen 已提交
122
   ```ts
H
huweiqi 已提交
123
   let uri = null;
Z
zengyawen 已提交
124
   const audioViewPicker = new picker.AudioViewPicker();
125
   audioViewPicker.save(audioSaveOptions).then((audioSelectResult) => {
H
huweiqi 已提交
126 127
     uri = audioSelectResult[0];
     console.info('audioViewPicker.save to file succeed and uri is:' + uri);
128
   }).catch((err) => {
H
huweiqi 已提交
129
     console.error(`Invoke audioViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
130 131 132
   })
   ```

H
huweiqi 已提交
133
4. 待界面从FilePicker返回后,再通过类似一个按钮调用其他函数,使用[fs.openSync](../reference/apis/js-apis-file-fs.md#fsopensync)接口,通过uri打开这个文件得到fd。这里需要注意接口权限参数是fs.OpenMode.READ_WRITE。
134 135

   ```ts
H
huweiqi 已提交
136
   let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
137 138 139
   console.info('file fd: ' + file.fd);
   ```

140
5. 通过fd使用[fs.writeSync](../reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改,编辑修改完成后关闭fd。
141 142 143 144 145

   ```ts
   let writeLen = fs.writeSync(file.fd, 'hello, world');
   console.info('write data to file succeed and size is:' + writeLen);
   fs.closeSync(file);
Z
zengyawen 已提交
146
   ```
147