更新记录
1.0.0(2026-03-11)
初始版发布
平台兼容性
uni-app(4.84)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|
| - | - | × | × | × | × | 5.0 | 1.0.0 | 12 | 1.0.0 | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | - | × | × |
uni-app x(4.84)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|
| × | × | 5.0 | 1.0.0 | 12 | 1.0.0 | × | × |
jun-file-open
文件分享接收插件,让其他应用可以通过"分享"或"打开方式"或"用其他应用打开"或"共享"将文件发送到本应用。
功能
- 用其他应用打开文件时,可在分享列表中看到本应用
- 接收分享的文件并获取文件路径、文件名、MIME类型、文件大小、扩展名等信息
- 支持单文件和多文件分享
- 支持 PDF、Office文档、图片、视频、音频、文本、压缩包等各类文件
- iOS 和 Android 双平台支持
支持的文件类型
默认支持以下文件类型(可通过修改 AndroidManifest.xml 和 Info.plist 自定义):
| 类型 | 格式 |
|---|---|
| 文档 | PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX |
| 图片 | JPG, PNG, GIF, WEBP, SVG 等 |
| 视频 | MP4, MOV, AVI 等 |
| 音频 | MP3, WAV, AAC 等 |
| 文本 | TXT, HTML, CSS, JS, JSON, XML, CSV |
| 压缩 | ZIP, RAR, 7Z |
| 其他 | 通用二进制文件 |
使用方法
1. 注册监听
在应用启动时(如 App.vue 的 onLaunch 或页面的 onLoad)注册文件分享监听:
import { onFileShared, offFileShared } from "@/uni_modules/jun-file-open";
// 注册监听
onFileShared((res) => {
console.log("收到分享文件:", res.files);
res.files.forEach((file) => {
console.log("文件路径:", file.filePath);
console.log("文件名:", file.fileName);
console.log("MIME类型:", file.mimeType);
console.log("文件大小:", file.fileSize);
console.log("扩展名:", file.fileExtension);
console.log("base64长度:", file.base64Data.length);
});
});
iOS 端通过 plus.io 读取文件
iOS 端返回的 filePath 为 _doc/ 开头的相对路径(如 _doc/jun_file_open_shared/xxx.jpeg),可通过 plus.io.resolveLocalFileSystemURL 读取文件内容:
onFileShared((res) => {
res.files.forEach((file) => {
// 方式一:直接使用 base64Data(推荐)
const base64 = file.base64Data;
// 方式二:通过 plus.io 读取文件(仅 App 端)
plus.io.resolveLocalFileSystemURL(
file.filePath,
(entry) => {
entry.file((f) => {
const reader = new plus.io.FileReader();
reader.onloadend = (e) => {
const dataUrl = e.target.result; // data:image/jpeg;base64,...
console.log("读取成功,长度:", dataUrl.length);
};
reader.readAsDataURL(f);
});
},
(err) => {
console.error("解析路径失败:", err.message);
},
);
});
});
注意:Android 端返回的
filePath为file://开头的绝对路径,iOS 端返回的为_doc/开头的相对路径。如需跨平台读取文件内容,建议直接使用base64Data字段。
2. 取消监听
在不需要时取消监听:
offFileShared();
3. 手动检查
主动检查当前是否有待处理的分享文件:
import { checkSharedFile } from "@/uni_modules/jun-file-open";
checkSharedFile((res) => {
console.log("检查到分享文件:", res.files);
});
API
onFileShared(callback)
注册文件分享接收监听。当其他应用分享文件到本应用时,callback 会被调用。
参数:
callback:(res: SharedFileResult) => void- 接收到文件时的回调
SharedFileResult:
files:SharedFileInfo[]- 接收到的文件列表
SharedFileInfo:
filePath:string- 文件本地缓存路径(Android 为file://绝对路径,iOS 为_doc/相对路径)fileName:string- 文件名mimeType:string- 文件MIME类型fileSize:number- 文件大小(字节)fileExtension:string- 文件扩展名base64Data:string- 文件内容的 base64 编码(原生层直接读取,读取失败时为空字符串)
offFileShared()
取消文件分享接收监听。
checkSharedFile(callback)
手动检查当前是否有待处理的分享文件。
自定义支持的文件类型
Android
修改 utssdk/app-android/AndroidManifest.xml 中的 <intent-filter> 的 <data android:mimeType="..." /> 来控制支持的文件类型。
iOS
修改 utssdk/app-ios/Info.plist 中的 CFBundleDocumentTypes 的 LSItemContentTypes 来控制支持的文件类型。
平台差异
| 特性 | Android | iOS |
|---|---|---|
| filePath 格式 | file:// 绝对路径 |
_doc/ 相对路径 |
| 文件存储位置 | 应用缓存目录 | 应用 _doc 文档目录 |
| plus.io 读取 | 直接使用 filePath | 使用 _doc/ 相对路径 |
| base64Data | 支持 | 支持 |
注意事项
- 需要自定义基座云打包后才能生效(真机调试需使用自定义基座)
- 文件会被复制到应用缓存目录,使用完毕后建议手动清理
- Android 端通过 Intent Filter 实现,iOS 端通过 Document Types + UTSiOSHookProxy 实现
- 推荐使用
base64Data字段获取文件内容,跨平台无差异 - iOS 端的
filePath为_doc/开头的相对路径,可通过plus.io.resolveLocalFileSystemURL读取;Android 端为file://绝对路径

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 24
赞赏 0
下载 11393577
赞赏 1873
赞赏
京公网安备:11010802035340号