更新记录
1.1.0(2026-06-01)
- 新增
setFileOpenConfigAPI,支持配置includeBase64(默认 true,保持兼容),大文件可关闭 base64 避免内存占用和闪屏 - 新增
clearSharedFileCacheAPI,清空分享文件缓存目录 - 新增
clearSharedFileAPI,按路径删除单个缓存文件(含路径安全校验)
1.0.2(2026-05-23)
- 修复 Android 部分应用通过 ClipData 传递文件 URI 时无法接收的问题
- 修复 Android
file://路径文件复制失败导致无回调的问题 - 修复 Android 监听注册前到达的 Intent 被丢弃的问题(对齐 iOS pending 机制)
- 优化 Intent 去重逻辑,避免重复触发回调
1.0.0(2026-03-11)
初始版发布
查看更多平台兼容性
uni-app(4.84)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | × | × | √ | 1.0.0 | √ | 1.0.0 | 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 双平台支持
- 可配置是否返回 base64 数据(大文件性能优化)
- 提供缓存清理 API,避免存储占用持续增长
支持的文件类型
默认支持以下文件类型(可通过修改 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 中尽早注册(不要包在 #ifdef APP-ANDROID 里,否则可能被条件编译剔除):
import {
setFileOpenConfig,
onFileShared,
offFileShared,
checkSharedFile,
clearSharedFileCache,
clearSharedFile,
} from "@/uni_modules/jun-file-open";
// 大文件场景建议关闭 base64,避免内存占用和闪屏(默认 true,保持兼容)
setFileOpenConfig({ includeBase64: false });
function handleSharedFile(res) {
console.log("收到分享文件:", res.files);
// 处理完成后清理缓存
res.files.forEach((file) => {
clearSharedFile(file.filePath);
});
// 或一次性清空全部:clearSharedFileCache();
}
export default {
onLaunch() {
onFileShared(handleSharedFile);
// Android 建议:监听 newintent,处理 App 已在后台时再次「打开方式/分享」
// #ifdef APP-PLUS
plus.globalEvent.addEventListener("newintent", () => {
checkSharedFile(handleSharedFile);
});
// #endif
},
onExit() {
offFileShared();
},
};
iOS 端通过 plus.io 读取文件
iOS 端返回的 filePath 为 _doc/ 开头的相对路径(如 _doc/jun_file_open_shared/xxx.jpeg),可通过 plus.io.resolveLocalFileSystemURL 读取文件内容:
onFileShared((res) => {
res.files.forEach((file) => {
// 方式一:小文件可直接使用 base64Data(需 setFileOpenConfig({ includeBase64: true }),默认已开启)
const base64 = file.base64Data;
// 方式二:通过 plus.io 读取文件(大文件推荐,需 includeBase64: false)
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;大文件建议setFileOpenConfig({ includeBase64: false })后通过filePath读取。
2. 取消监听
在不需要时取消监听:
offFileShared();
3. 手动检查
主动检查当前是否有待处理的分享文件:
import { checkSharedFile } from "@/uni_modules/jun-file-open";
checkSharedFile((res) => {
console.log("检查到分享文件:", res.files);
});
4. 清理缓存
分享文件会被复制到插件缓存目录,使用完毕后请调用清理 API:
import { clearSharedFileCache, clearSharedFile } from "@/uni_modules/jun-file-open";
// 清空全部缓存,返回 { deletedCount: number }
const result = clearSharedFileCache();
console.log("已删除文件数:", result.deletedCount);
// 删除单个文件(Android: file:// 路径;iOS: _doc/ 相对路径)
clearSharedFile(file.filePath);
API
setFileOpenConfig(config)
设置插件全局配置,建议在 onFileShared 之前调用。
参数:
config.includeBase64:boolean- 是否在回调中包含base64Data,默认true。大文件建议设为false,通过filePath读取以避免内存占用和闪屏。
setFileOpenConfig({ includeBase64: false });
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 编码(includeBase64: true时返回,否则为空字符串;读取失败时也为空字符串)
offFileShared()
取消文件分享接收监听。
checkSharedFile(callback)
手动检查当前是否有待处理的分享文件。
clearSharedFileCache()
清空分享文件缓存目录(jun_file_open_shared),返回 ClearSharedCacheResult:
deletedCount:number- 删除的文件数量
clearSharedFile(filePath)
删除单个分享缓存文件。
参数:
filePath:string- Android 为file://绝对路径,iOS 为_doc/jun_file_open_shared/...相对路径
返回值: boolean - 是否删除成功(路径不在缓存目录内时返回 false)
自定义支持的文件类型
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 | 可配置(默认开启) | 可配置(默认开启) |
注意事项
- 需要自定义基座/云打包后才能生效(修改 Manifest 或 Info.plist 后需重新制作自定义基座)
- 文件会被复制到插件缓存目录,使用完毕后请调用
clearSharedFileCache()或clearSharedFile()清理 - Android 端通过 Intent Filter 实现,iOS 端通过 Document Types + UTSiOSHookProxy 实现
- 小文件可使用
base64Data;大文件建议setFileOpenConfig({ includeBase64: false })后通过filePath读取,避免内存占用和闪屏 - iOS 端的
filePath为_doc/开头的相对路径,可通过plus.io.resolveLocalFileSystemURL读取;Android 端为file://绝对路径 - Android 集成要点:
onFileShared必须在App.vue的onLaunch中调用;App 已在后台时再次打开文件,需监听plus.globalEvent的newintent并调用checkSharedFile - 已知限制:微信等部分 App 的「用其他应用打开」可能不走标准 Android Intent,系统文件管理器、相册、WPS 等标准分享/打开方式可正常使用

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