更新记录

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 端返回的 filePathfile:// 开头的绝对路径,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 中的 CFBundleDocumentTypesLSItemContentTypes 来控制支持的文件类型。

平台差异

特性 Android iOS
filePath 格式 file:// 绝对路径 _doc/ 相对路径
文件存储位置 应用缓存目录 应用 _doc 文档目录
plus.io 读取 直接使用 filePath 使用 _doc/ 相对路径
base64Data 支持 支持

注意事项

  1. 需要自定义基座云打包后才能生效(真机调试需使用自定义基座)
  2. 文件会被复制到应用缓存目录,使用完毕后建议手动清理
  3. Android 端通过 Intent Filter 实现,iOS 端通过 Document Types + UTSiOSHookProxy 实现
  4. 推荐使用 base64Data 字段获取文件内容,跨平台无差异
  5. iOS 端的 filePath_doc/ 开头的相对路径,可通过 plus.io.resolveLocalFileSystemURL 读取;Android 端为 file:// 绝对路径

隐私、权限声明

1. 本插件需要申请的系统权限列表:

文件读写

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。