uniapp如何下载文件到系统公共目录
在uniapp中如何实现将文件下载到系统的公共目录?比如下载到Android的Downloads文件夹或者iOS的公共存储区域。使用uni.downloadFile只能保存到应用内部目录,尝试过plus.io和native.js但没成功。请问有没有完整的代码示例或解决方案?需要兼容多平台。
2 回复
在uniapp中,使用uni.downloadFile下载文件后,通过uni.saveFile保存到系统公共目录。但注意:H5端无法直接访问系统目录,需用户手动保存;App端需申请存储权限。
在 UniApp 中下载文件到系统公共目录(如 Android 的 Downloads 文件夹),可以使用 uni.downloadFile 下载文件,然后通过 uni.saveFile 保存到系统公共目录。以下是具体步骤和代码示例:
步骤说明:
- 下载文件:使用
uni.downloadFile获取临时文件路径。 - 保存到公共目录:通过
uni.saveFile将临时文件移动到系统 Downloads 目录(或其他公共目录)。
代码示例:
// 下载文件到系统公共目录
uni.downloadFile({
url: 'https://example.com/yourfile.pdf', // 文件下载链接
success: (res) => {
if (res.statusCode === 200) {
// 获取临时文件路径
const tempFilePath = res.tempFilePath;
// 保存到系统公共目录(如 Downloads)
uni.saveFile({
tempFilePath: tempFilePath,
success: (saveRes) => {
uni.showToast({
title: '文件已保存到下载目录',
icon: 'success'
});
console.log('文件保存路径:', saveRes.savedFilePath);
},
fail: (err) => {
uni.showToast({
title: '保存失败',
icon: 'none'
});
console.error('保存失败:', err);
}
});
}
},
fail: (error) => {
uni.showToast({
title: '下载失败',
icon: 'none'
});
console.error('下载失败:', error);
}
});
注意事项:
- 平台差异:
uni.saveFile在 Android 上默认保存到 Downloads 目录,iOS 可能受沙盒限制,无法直接保存到系统公共目录。 - 权限配置:
- Android 需在
manifest.json中添加存储权限:"permissions": { "writeExternalStorage": true } - iOS 无直接公共目录写入权限,通常保存到应用沙盒,用户可通过“文件”应用手动导出。
- Android 需在
- 文件类型:确保下载链接有效,且设备有足够存储空间。
替代方案(Android):
如需更精确控制路径,可使用原生插件(如 uni-app 官方未直接支持系统目录写入时)。
以上方法适用于大多数场景,如有复杂需求可考虑平台特定扩展。

