Hi there
Using a standard implementation to download files and save them locally on the device.
When they are downloaded, I am not able to locate them on the device with for example "File Explorer" app, tried on emulator and physical iPad.
const urlExtensions = this.getUrlExtension(attachment.url);
const localFile = `${RNFS.LibraryDirectoryPath}/${attachment.title}.${urlExtensions}`;
const options = {
fromUrl: attachment.url,
toFile: localFile,
fileCache: true
};
if (await RNFS.exists(localFile)) {
FileViewer.open(localFile);
} else {
await RNFS.downloadFile(options).promise
.then(() => {
FileViewer.open(localFile);
})
.then((res) => {
// success
// console.log("success");
})
.catch(error => {
// error
console.log("Attachment open error: ", error);
});
}
Also tried to use "DocumentDirectoryPath", same issue.
Thanks in advance
Regards
But did you check if the file exists at the given path?
At which path? I'm able to view the file in my application...
Hello, I am having same issue, cant locate file on device. I am using this path RNFetchBlob.fs?.dirs?.DownloadDir
` downloadSupplementFile = async (data) => {
const dirs = RNFetchBlob.fs?.dirs?.DownloadDir;
try {
this.fetchFile(data, dirs);
} catch (err) { }
};
fetchFile = (data, dirs) => {
RNFetchBlob.config({
fileCache: true,
addAndroidDownloads: {
useDownloadManager: true,
notification: true,
mediaScannable: true,
title: data?.originalname,
path: `${dirs}/${data?.originalname}`,
},
})
.fetch('GET', data?.url)
.then(async (res) => {
try {
if (Platform.OS === 'ios') {
const file = res.path();
let base64 = await res.base64();
let len = await RNFetchBlob.fs.writeFile(file, base64, 'base64');
return true;
} else { return true}
} catch (error) {
}
})
.catch((err) => return true );
};`
I solved this problem with share function,
When you fetch the file on success it gives you path of the file where it is stored but you cant locate it physically
to do so you have to take that path and call share using that link and then you can see the options to share that file and save in downloads.
fetchFile = (data) => {
RNFetchBlob.config({
fileCache: true,
addAndroidDownloads: {
useDownloadManager: true,
notification: true,
mediaScannable: true,
title: data?.originalname,
path:${dirs}/${data?.originalname},
},
})
.fetch('GET', data?.url)
.then((res) => {
if (Platform.OS === 'ios') {
RNFetchBlob.ios.openDocument(res.data);
return true;
} else {
console.log('The file saved to android ', res.path());
return true;
}
})
.catch((err) => {
console.log('TCL:: fetchFile -> err', err);
return true;
});
};
Having the same issue. In android it downloads the file perfectly in the specified folder. In iOS it says downloaded but it is nowhere saved :/
I was facing the same issue I followed this solution and it started working. You have to add Yes to "Supports opening documents in place" and "Application supports iTunes file sharing" in Info.plist file. Hope this solves your issue.
@FaisalAli19 solution worked perfectly. The issue should be closed I guess.
Thanks @FaisalAli19 , your solution worked for me with RNFS.DocumentDirectoryPath. By the way I got a 'ENOENT: no such file or directory' error message using RNFS.LibraryDirectoryPath
Most helpful comment
I was facing the same issue I followed this solution and it started working. You have to add Yes to "Supports opening documents in place" and "Application supports iTunes file sharing" in Info.plist file. Hope this solves your issue.
https://stackoverflow.com/questions/54626359/react-native-fs-ios-not-showing-files-in-the-document-directory