![](/img/trans.png)
[英]Flutter how to download a file using flutter_downloader package
[英]Downloading failed always using flutter downloader package
我嘗試使用 flutter 下載器 ZEFE90A8E604A7C840E88D03A6BD8ZF6 從 firebase 存儲下載 pdf 文件。 但是下載總是顯示失敗,不知道是什么原因。
這是我嘗試過的代碼。 請提出一些解決方案。在此先感謝。
void _startDownload(String link) async
{
var dir = await getExternalStorageDirectory();
try{
final taskId = await FlutterDownloader.enqueue(
url: link,
savedDir: dir.path,
fileName:"sampe.docx",
showNotification: true, // show download progress in status bar(forAndroid)
openFileFromNotification: true, // click on notification to open downloaded file (for Android)
);
debugPrint(taskId);
// FlutterDownloader.retry(taskId: taskId);
}
catch(e){
print(e);
}
}
這是我收到的錯誤。
W/System.err(18012): java.io.FileNotFoundException: /storage/emulated/0/sampe.docx (Permission denied)
W/System.err(18012): at java.io.FileOutputStream.open(Native Method)
W/System.err(18012): at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
W/System.err(18012): at java.io.FileOutputStream.<init>(FileOutputStream.java:140)
W/System.err(18012): at vn.hunghd.flutterdownloader.DownloadWorker.downloadFile(DownloadWorker.java:190)
W/System.err(18012): at vn.hunghd.flutterdownloader.DownloadWorker.doWork(DownloadWorker.java:102)
W/System.err(18012): at androidx.work.Worker$1.run(Worker.java:57)
W/System.err(18012): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
W/System.err(18012): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
W/System.err(18012): at java.lang.Thread.run(Thread.java:760)
I/WorkerWrapper(18012): Worker result SUCCESS for Work [ id=b7676538-a655-454a-89e2-1899f0e078cd, tags={ vn.hunghd.flutterdownloader.DownloadWorker, flutter_download_task } ]
確保你有寫權限。 沒有讀、寫權限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
嘗試將android:requestLegacyExternalStorage="true"
到android/app/src/main/AndroidManifest.xml
的flutter_downloader
提供程序,例如:
<provider
android:name="vn.hunghd.flutterdownloader.DownloadedFileProvider"
android:authorities="im.mingguang.mingguang_app.flutter_downloader.provider"
android:exported="false"
android:grantUriPermissions="true"
android:requestLegacyExternalStorage="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
//Check permission first need check permission
Future<bool> _checkPermission() async {
if (platform == TargetPlatform.android) {
final status = await Permission.storage.status;
if (status != PermissionStatus.granted) {
final result = await Permission.storage.request();
if (result == PermissionStatus.granted) {
return true;
}
} else {
return true;
}
} else {
return true;
}
return false;
}
// user_permission code for mainfest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
確保您的文件名不同,因為相同的文件名不允許存儲
void download(String url) async {
final status = await Permission.storage.request();
if (status.isGranted) {
final id = await FlutterDownloader.enqueue(
url: url,
savedDir: "/storage/emulated/0/Download",
showNotification: true,
openFileFromNotification: true,
fileName: DateTime.now().millisecond.toString().replaceAll(" ", ""),
).then((value) {
print("complated");
});
} else {
setState(() {
print("faild");
});
print('Permission Denied');
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.