Open pratik-7span opened 3 years ago
i am also facing the same issue, i wanted to download a file to private storage by path provided by getApplicationSupportDirectory but the package keeps downloading to downloads folder in the external storage
Same issue here
i have checked the native android implementation, this isn't a bug don't know why but the path provided is ignored and is replaced by downloads media folder intentionally,
@RequiresApi(Build.VERSION_CODES.Q)
private Uri addFileToDownloadsApi29(String filename) {
Uri collection = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
try {
ContentValues values = new ContentValues();
values.put(MediaStore.Downloads.DISPLAY_NAME, filename);
ContentResolver contentResolver = getApplicationContext().getContentResolver();
return contentResolver.insert(collection, values);
} catch (Exception e) {
e.printStackTrace();
log("Create a file using MediaStore API failed ");
}
return null;
}
its in DownloadWorker.java
For any one who wants to the downloaded files to private or local storage
1.go to the android implementation and look for DownloadWorkder.java file
2.look for this function addFileToDownloadsApi21 and replace its content with this File newFile = new File(getApplicationContext().getFilesDir(), filename); return newFile;
and add this to bottom
fileApi21 = addFileToDownloadsApi21(filename); outputStream = new FileOutputStream(fileApi21, isResume);
Also comment out a big chunk of code in => if (status == DownloadStatus.COMPLETE) {}. condition
seems reckless but its a fix, you can file your files in the local storage
Thank you @abeyshiferaw0 , works perfectly. Though I was wondering when this can be fixed in the master repo
having same issue here, how you solve it? @abeyshiferaw0 please can you explain how to go to "go to the android implementation" ? I'm still having same problem I can't store the files into subfolder of downlad directory
Same issue here, can someone do a fork with the fix ? ^^'
Also comment out a big chunk of code in => if (status == DownloadStatus.COMPLETE) {}. condition
Does it really work for you?
Also comment out a big chunk of code in => if (status == DownloadStatus.COMPLETE) {}. condition
Does it really work for you?
yes it does work, if you only want the downloaded file to be saved on the local private storage only
having same issue here, how you solve it? @abeyshiferaw0 please can you explain how to go to "go to the android implementation" ? I'm still having same problem I can't store the files into subfolder of download directory
if your using android studio double click shift and search for downloadWorker.java, open the file and you can edit the changes
Same issue here, can someone do a fork with the fix ? ^^'
https://github.com/abeyshiferaw0/flutter_downloader.git
this is the fork that i used, but it is only for downloading to internal storage only
just pass your desired location starting from getApplicationSupportDirectory() and it will work on both android and ios
e.g
`
/// to get downloaded file save path
Future
/// start download with path from getSaveDir() FlutterDownloader.enqueue( url: URL, savedDir: getSaveDir(), fileName: FILE_NAME, showNotification: true, openFileFromNotification: false, );
`
This may be duplicate of #525.
This is an epic fail. I have code in the field that is now downloading to the wrong directory. What in the world would make you change this behavior!!!???
I know this issue, it comes from updates in Android implementation due to support Scoped Storage model in Android 11. In Android 11, app can no longer create dedicated and app-specific directories with external storage. It causes savedDir
broken and confused. I am in process to re-design this plugin with new strategy to manage file download location. It is still in triage and discussion so it's very appreciated to have contribution and feedback from developers for this PR
P/S: for temporary solution, I publish v1.7.1 to fix the issue in case of internal storage. Use-case of external storage in Android 11, savedDir
will be ignored and downloaded files are always saved to Downloads folder (config by setting saveToPublicStorage
to true
)
@hnvn you can ask for this permission to create the folder await requestPermission(Permission.manageExternalStorage);
addFileToDownloadsApi21
where can i find this file ?
Had the same problem and fixed it.
flutter_downloader: 1.7.0
permission_handler: 8.1.5
external_path: 1.0.1
and replace it with:
flutter_downloader: 1.5.2
permission_handler: 8.1.5
external_path: 1.0.1
to be able to write you must have permissions: storage, manageExternalStorage, requestInstallPackages. in AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
I guess removing or changing "SaveInPublicStorage" to false would save the file to your required directory.
final id = await FlutterDownloader.enqueue( url: url, savedDir: externalDir.path, showNotification: true, openFileFromNotification: true, saveInPublicStorage: false);
@abeyshiferaw0 Is changing download worker java file currently working ? (api v 33)
I am getting issues while downloading videos from the server. I had given the path for Android as (
/storage/emulated/0/Movies/MyApp
) but It's downloading video in the "Download" folder only.Here is my code:
Here are the logs:
But after downloading its printing (from the library) as below:
Can you please tell me why it's downloading the video in the Download folder only? Why it's not taking the path I have given?