更新记录
1.2.0(2025-06-19)
正式开放功能,请自由使用!
1.0.0(2025-06-19)
1.0.0
平台兼容性
文件路径管理器插件
一个用于处理Android文件分享和选择的UTS插件,突破uni-app文件选择限制。
🎯 核心功能
- 主动文件选择 - 突破uni-app限制,支持选择任意类型文件
- 分享文件处理 - 接收和处理第三方应用分享的文件
- 智能路径处理 - 自动处理不同URI类型,确保文件可正常上传
- 自动清理 - 定时清理临时文件,防止缓存堆积
📱 支持平台
- ✅ Android App
- ❌ iOS(占位符实现)
🚀 快速开始
1. 配置AndroidManifest.xml
在项目根目录的AndroidManifest.xml
中添加:
<!-- 在<activity>标签内添加文件分享支持 -->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
package="piao.manifest.filter">
<application>
<!-- 主Activity配置 -->
<activity android:name="io.dcloud.PandoraEntry" android:launchMode="singleTask"
android:configChanges="orientation|keyboardHidden|screenSize" android:windowSoftInputMode="adjustResize">
<!-- 添加文件分享的Intent过滤器 -->
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 接收所有文件类型 -->
<data android:mimeType="*/*" />
<!-- 限定支持的文件类型 -->
<!-- <data android:mimeType="image/*" />
<data android:mimeType="audio/*" />
<data android:mimeType="video/*" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
<data android:mimeType="text/plain" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" /> -->
</intent-filter>
</activity>
</application>
</manifest>
2. 基本使用
// #ifdef APP-PLUS
import {
hasSharedFiles,
getSharedFilePath,
chooseFile,
startAutoCleanup
} from '@/uni_modules/piao-filePathManager';
// #endif
export default {
onLoad() {
// 启动自动清理
startAutoCleanup();
// 检查分享文件
if (hasSharedFiles()) {
this.getSharedFiles();
}
},
methods: {
// 获取分享文件
getSharedFiles() {
getSharedFilePath({
success: (res) => {
res.files.forEach(file => {
console.log('文件:', file.name);
// file.path 可直接用于上传
this.uploadFile(file.path, file.name);
});
}
});
},
// 主动选择文件
selectFiles() {
chooseFile({
multiple: true,
accept: "*/*",
success: (res) => {
res.files.forEach(file => {
this.uploadFile(file.path, file.name);
});
}
});
}
}
}
📋 API参考
检测和获取分享文件
// 检查是否有分享文件
const hasFiles = hasSharedFiles(); // 返回 boolean
// 获取分享文件信息
getSharedFilePath({
success: (res) => {
// res.count: 文件数量
// res.files: 文件信息数组
},
fail: (error) => console.log(error.errMsg)
});
主动选择文件
chooseFile({
multiple: true, // 是否多选
accept: "image/*", // 文件类型过滤
success: (res) => {
// 同上,返回文件信息
}
});
自动清理功能 🆕
// 启动自动清理(推荐在应用启动时调用)
startAutoCleanup();
// 停止自动清理
stopAutoCleanup();
// 获取临时文件状态
const info = getTempFileInfo();
console.log(`${info.count}个临时文件,共${info.totalSizeString}`);
// 手动清理
cleanupTempFiles();
📁 返回的文件信息
{
path: "file:///path/to/file.pdf", // ✅ 可直接上传
name: "文档.pdf", // 文件名(支持中文)
size: 1024, // 文件大小(字节)
sizeString: "1.00 KB", // 格式化大小
exists: true, // 文件是否存在
canRead: true // 是否可读
}
⚙️ 清理策略
- 自动清理: 每30分钟清理超过2小时的临时文件
- 手动清理: 立即清理超过10分钟的临时文件
- 安全机制: 只清理插件创建的文件,不影响其他应用
💡 最佳实践
- 应用启动时调用
startAutoCleanup()
- 页面卸载时调用
stopAutoCleanup()
- 上传完成后调用
cleanupTempFiles()
- 定期检查
getTempFileInfo()
监控存储状态
❓ 常见问题
Q: 为什么需要配置AndroidManifest.xml?
A: 用于接收其他应用的文件分享Intent。
Q: 文件路径可以直接上传吗?
A: 可以!返回的path已包含正确的协议前缀。
Q: 临时文件会占用太多空间吗?
A: 不会,启用自动清理后会定期清理过期文件。
版本信息
当前版本: v1.2.0
更新内容: 新增自动清理功能,优化内存管理