Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
d0994cc2
D
Docs
项目概览
OpenHarmony
/
Docs
1 年多 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d0994cc2
编写于
7月 20, 2023
作者:
Y
yxn
提交者:
yxn
7月 31, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
补充picker写入pixelmap用例
Signed-off-by:
N
yxn
<
yxn1024hw@163.com
>
上级
66fbd1db
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
72 addition
and
27 deletion
+72
-27
zh-cn/application-dev/file-management/save-user-file.md
zh-cn/application-dev/file-management/save-user-file.md
+71
-26
zh-cn/application-dev/file-management/select-user-file.md
zh-cn/application-dev/file-management/select-user-file.md
+1
-1
未找到文件。
zh-cn/application-dev/file-management/save-user-file.md
浏览文件 @
d0994cc2
...
...
@@ -2,55 +2,100 @@
在从网络下载文件到本地、或将已有用户文件另存为新的文件路径等场景下,需要使用FilePicker提供的保存用户文件的能力。
对音频、图片、视频、文档类文件的保存操作类似,均通过调用对应picker的save()接口并传入对应的saveOptions来实现。
对音频、图片、视频、文档类文件的保存操作类似,均通过调用对应picker的save()接口并传入对应的saveOptions来实现。
此类接口不需要申请任何权限。
save接口会将文件保存在文件管理器,而不是图库。
## 保存图片或视频类文件
1.
导入选择器模块和文件管理模块。
本例展示了从图库中选择一张图片,保存到文件管理器的示例代码。
1.
导入
[
选择器
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-file-picker.md
)
、
[
文件管理
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-file-fs.md
)
、
[
相册管理
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-photoAccessHelper.md
)
、
[
数据共享谓词
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-data-dataSharePredicates.md
)
模块。
```
ts
import
picker
from
'
@ohos.file.picker
'
;
import
fs
from
'
@ohos.file.fs
'
;
import
photoAccessHelper
from
'
@ohos.file.photoAccessHelper
'
;
import
dataSharePredicates
from
'
@ohos.data.dataSharePredicates
'
;
```
2.
创建图库保存选项实例
。
2.
获取设备里第一张图片的缩略图。注意:在执行这一步之前,要先确保设备里至少有一张图片
。
```
ts
const
photoSaveOptions
=
new
picker
.
PhotoSaveOptions
();
// 创建文件管理器保存选项实例
photoSaveOptions
.
newFileNames
=
[
"
PhotoViewPicker01.jpg
"
];
// 保存文件名(可选)
const
context
=
getContext
(
this
);
let
photoAccessHelper
=
photoAccessHelper
.
getPhotoAccessHelper
(
context
);
let
pixelmapArrayBuffer
;
async
getPixelmap
()
{
try
{
let
predicates
=
new
dataSharePredicates
.
DataSharePredicates
();
let
fetchOption
=
{
fetchColumns
:
[],
predicates
:
predicates
};
let
fetchResult
=
await
photoAccessHelper
.
getAssets
(
fetchOption
);
console
.
info
(
'
[picker] getThumbnail fetchResult:
'
+
fetchResult
);
const
asset
=
await
fetchResult
.
getFirstObject
();
console
.
info
(
'
[picker] getThumbnail asset displayName =
'
,
asset
.
displayName
);
asset
.
getThumbnail
().
then
((
pixelMap
)
=>
{
let
pixelBytesNumber
=
pixelMap
.
getPixelBytesNumber
();
const
readBuffer
=
new
ArrayBuffer
(
pixelBytesNumber
);
pixelMap
.
readPixelsToBuffer
(
readBuffer
).
then
(()
=>
{
pixelmapArrayBuffer
=
readBuffer
;
})
}).
catch
((
err
)
=>
{
console
.
error
(
'
[picker] getThumbnail failed with error:
'
+
err
);
});
}
catch
(
error
)
{
console
.
error
(
'
[picker] getThumbnail error =
'
+
error
);
}
}
```
3.
创建图库选择器实例,调用
[
save()
](
../reference/apis/js-apis-file-picker.md#save
)
接口拉起FilePicker界面进行文件保存。用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存
文档
的uri。
3.
创建图库选择器实例,调用
[
save()
](
../reference/apis/js-apis-file-picker.md#save
)
接口拉起FilePicker界面进行文件保存。用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存
图片
的uri。
</br>
save返回的uri权限是读写权限,可以根据结果集中uri进行文件读写等操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。
```
ts
let
uri
=
null
;
const
photoViewPicker
=
new
picker
.
PhotoViewPicker
();
photoViewPicker
.
save
(
photoSaveOptions
).
then
((
photoSaveResult
)
=>
{
uri
=
photoSaveResult
[
0
];
console
.
info
(
'
photoViewPicker.save to file succeed and uri is:
'
+
uri
);
}).
catch
((
err
)
=>
{
console
.
error
(
`Invoke photoViewPicker.save failed, code is
${
err
.
code
}
, message is
${
err
.
message
}
`
);
})
save返回的uri权限是读写权限,可以根据结果集里面的uri进行文件读写等操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。
```
ts
let
uri
:
string
;
async
photoViewPickerSave
()
{
try
{
const
photoSaveOptions
=
new
picker
.
PhotoSaveOptions
();
// 创建文件管理器保存选项实例
photoSaveOptions
.
newFileNames
=
[
"
PhotoViewPicker01.png
"
];
// 保存文件名(可选),方括号里的文件名自定义,每次不能重复,设备里已有这个文件的话,名字就需要改个不一样的,不然接口会报错
const
photoViewPicker
=
new
picker
.
PhotoViewPicker
();
try
{
let
photoSaveResult
=
await
photoViewPicker
.
save
(
photoSaveOptions
);
if
(
photoSaveResult
!=
undefined
)
{
console
.
info
(
"
[picker] photoViewPickerSave photoSaveResult =
"
+
JSON
.
stringify
(
photoSaveResult
));
this
.
uri
=
photoSaveResult
[
0
];
console
.
info
(
'
photoViewPicker.save to file succeed and uri is:
'
+
photoSaveResult
[
0
]);
}
}
catch
(
err
)
{
console
.
error
(
`[picker] Invoke photoViewPicker.save failed, code is
${
err
.
code
}
, message is
${
err
.
message
}
`
);
}
}
catch
(
error
)
{
console
.
info
(
"
[picker] photoViewPickerSave error =
"
+
error
);
}
}
```
4.
待界面从FilePicker返回后,再通过类似一个按钮调用其他函数,使用
[
fs.openSync
](
../reference/apis/js-apis-file-fs.md#fsopensync
)
接口,通过uri打开这个文件得到fd。这里需要注意接口权限参数是fs.OpenMode.READ_WRITE。
```
ts
let
file
=
fs
.
openSync
(
uri
,
fs
.
OpenMode
.
READ_WRITE
);
console
.
info
(
'
file fd:
'
+
file
.
fd
);
```
5.
通过fd使用
[
fs.writeSync
](
../reference/apis/js-apis-file-fs.md#writesync
)
接口对这个文件进行编辑修改,编辑修改完成后关闭fd。
然后,通过fd使用
[
fs.write
](
../reference/apis/js-apis-file-fs.md#fswrite
)
接口对这个文件进行编辑修改,编辑修改完成后关闭fd。
```
ts
let
writeLen
=
fs
.
writeSync
(
file
.
fd
,
'
hello, world
'
);
console
.
info
(
'
write data to file succeed and size is:
'
+
writeLen
);
fs
.
closeSync
(
file
);
async
writeOnly
(
uri
)
{
try
{
let
file
=
fs
.
openSync
(
uri
,
fs
.
OpenMode
.
WRITE_ONLY
);
let
writeLen
=
await
fs
.
write
(
file
.
fd
,
pixelmapArrayBuffer
);
fs
.
closeSync
(
file
);
console
.
info
(
"
[picker] writeOnly writeLen =
"
+
writeLen
);
}
catch
(
error
)
{
console
.
info
(
"
[picker] writeOnly error:
"
+
error
);
}
}
```
## 保存文档类文件
...
...
zh-cn/application-dev/file-management/select-user-file.md
浏览文件 @
d0994cc2
# 选择用户文件
终端用户有时需要分享、保存一些图片、视频等用户文件,开发者需要在应用中支持此类使用场景。此时,开发者可以使用OpenHarmony系统预置的
[
文件选择器(FilePicker)
](
../reference/apis/js-apis-file-picker.md
)
,实现用户文件选择及保存能力。
终端用户有时需要分享、保存一些图片、视频等用户文件,开发者需要在应用中支持此类使用场景。此时,开发者可以使用OpenHarmony系统预置的
[
文件选择器(FilePicker)
](
../reference/apis/js-apis-file-picker.md
)
,实现用户文件选择及保存能力。
此类接口不需要申请任何权限。
根据用户文件的常见类型,文件选择器(FilePicker)分别提供以下接口:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录