使用react-native-fs下载视频至Android相册不显示的解决求助
解决React Native下载视频到Android相册不显示的问题
你的代码已经完成了文件下载,但Android相册不会自动识别新增的文件——尤其是自定义目录下的文件,必须主动通知系统媒体库扫描索引这个文件,才能在相册中显示。
解决方案步骤:
确保权限配置
在android/app/src/main/AndroidManifest.xml中添加对应权限:- Android 9及以下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - Android 10及以上(适配分区存储):
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- Android 9及以下:
修改下载代码,添加媒体库扫描
下载完成后调用RNFS.scanFile()方法,通知系统索引新文件:import RNFS from 'react-native-fs'; import { ToastAndroid } from 'react-native'; const downloadRelfile = (fileUrl) => { let date = new Date(); const url = fileUrl; const myAlbumPath = RNFS.PicturesDirectoryPath + '/Pictpath'; RNFS.mkdir(myAlbumPath) .then(() => { const downloadD = `${myAlbumPath}/file_${Math.floor(date.getTime() + date.getSeconds() / 2)}.mp4`; return RNFS.downloadFile({ fromUrl: url, toFile: downloadD, }).promise; }) .then((res) => { console.log('File downloaded successfully', res); // 通知系统媒体库扫描新文件,让相册能识别到 return RNFS.scanFile(res.path()); }) .then(() => { ToastAndroid.showWithGravity( "Video downloaded successfully", ToastAndroid.LONG, ToastAndroid.CENTER ); }) .catch((err) => { console.log('Error:', err); ToastAndroid.showWithGravity( "Download failed", ToastAndroid.LONG, ToastAndroid.CENTER ); }); };
关键说明:
RNFS.scanFile()会触发Android媒体扫描器,将新下载的文件加入系统媒体库,相册就能读取到该文件。- 若使用Android 11+的分区存储,也可以直接将文件下载到
RNFS.VideosDirectoryPath(系统默认视频目录),无需额外扫描也能被相册自动识别。
内容的提问来源于stack exchange,提问作者React_Coder
相关产品推荐
相关产品推荐

