为什么我无法从 Firebase 存储下载此文件,即使该文件存在?



我得到下面的错误。似乎找不到文件,但我使用listAll()函数检查,我在位置看到了文件。


Future<void> downloadMyApp(String MyAppURL) async { 
final storagePath = await _firebaseStorage.ref().child('MyApp/Groups/groupChats/0exUS3P2XKFQ007TIMmm').listAll();
for (var item in storagePath.items) {
// The items under storageRef.
print('##MyApp## downloadMyApp item: ' + item.toString()); //I see the item here and its path is identical to MyAppURL
}
final MyAppRef = _firebaseStorage.ref().child(MyAppURL);
final dir = await getApplicationDocumentsDirectory();
final filename = dir.path + receivedMyAppsDir + '/' + MyAppRef.name; 
final file = File(filename);
try {
final downloadTask = MyAppRef.writeToFile(file);
downloadTask.snapshotEvents.listen((taskSnapshot) {
switch (taskSnapshot.state) {
case TaskState.running:
print('##MyApp## downloadMyApp downloadTask running');
break;
case TaskState.paused:
print('##MyApp## downloadMyApp downloadTask paused');
break;
case TaskState.success:
print('##MyApp## downloadMyApp downloadTask success');
break;
case TaskState.canceled:
print('##MyApp## downloadMyApp downloadTask canceled');
break;
case TaskState.error:
print('##MyApp## downloadMyApp downloadTask error');
break;
}
});
} catch (e) { //on FirebaseException
// Caught an exception from Firebase.
print('##MyApp## downloadMyApp ERROR: ' + e.toString());
}
}

E/FileDownloadTask(30544): Exception occurred during file write.  Aborting.
E/FileDownloadTask(30544): java.io.IOException: No such file or directory
E/FileDownloadTask(30544):  at java.io.UnixFileSystem.createFileExclusively0(Native Method)
E/FileDownloadTask(30544):  at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
E/FileDownloadTask(30544):  at java.io.File.createNewFile(File.java:1006)
E/FileDownloadTask(30544):  at com.google.firebase.storage.FileDownloadTask.processResponse(FileDownloadTask.java:136)
E/FileDownloadTask(30544):  at com.google.firebase.storage.FileDownloadTask.run(FileDownloadTask.java:228)
E/FileDownloadTask(30544):  at com.google.firebase.storage.StorageTask.lambda$getRunnable$7$StorageTask(StorageTask.java:1072)
E/FileDownloadTask(30544):  at com.google.firebase.storage.-$$Lambda$StorageTask$q9YBoR_A8LB-JxTCx8JRQvabaZs.run(Unknown Source:2)
E/FileDownloadTask(30544):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/FileDownloadTask(30544):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/FileDownloadTask(30544):  at java.lang.Thread.run(Thread.java:920)
E/StorageException(30544): StorageException has occurred.
E/StorageException(30544): An unknown error occurred, please check the HTTP result code and inner exception for server response.
E/StorageException(30544):  Code: -13000 HttpResult: 200
E/StorageException(30544): No such file or directory
E/StorageException(30544): java.io.IOException: No such file or directory
E/StorageException(30544):  at java.io.UnixFileSystem.createFileExclusively0(Native Method)
E/StorageException(30544):  at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
E/StorageException(30544):  at java.io.File.createNewFile(File.java:1006)
E/StorageException(30544):  at com.google.firebase.storage.FileDownloadTask.processResponse(FileDownloadTask.java:136)
E/StorageException(30544):  at com.google.firebase.storage.FileDownloadTask.run(FileDownloadTask.java:228)
E/StorageException(30544):  at com.google.firebase.storage.StorageTask.lambda$getRunnable$7$StorageTask(StorageTask.java:1072)
E/StorageException(30544):  at com.google.firebase.storage.-$$Lambda$StorageTask$q9YBoR_A8LB-JxTCx8JRQvabaZs.run(Unknown Source:2)
E/StorageException(30544):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(30544):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(30544):  at java.lang.Thread.run(Thread.java:920)
E/StorageException(30544): StorageException has occurred.
E/StorageException(30544): An unknown error occurred, please check the HTTP result code and inner exception for server response.
E/StorageException(30544):  Code: -13000 HttpResult: 200
E/StorageException(30544): No such file or directory
E/StorageException(30544): java.io.IOException: No such file or directory
E/StorageException(30544):  at java.io.UnixFileSystem.createFileExclusively0(Native Method)
E/StorageException(30544):  at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
E/StorageException(30544):  at java.io.File.createNewFile(File.java:1006)
E/StorageException(30544):  at com.google.firebase.storage.FileDownloadTask.processResponse(FileDownloadTask.java:136)
E/StorageException(30544):  at com.google.firebase.storage.FileDownloadTask.run(FileDownloadTask.java:228)
E/StorageException(30544):  at com.google.firebase.storage.StorageTask.lambda$getRunnable$7$StorageTask(StorageTask.java:1072)
E/StorageException(30544):  at com.google.firebase.storage.-$$Lambda$StorageTask$q9YBoR_A8LB-JxTCx8JRQvabaZs.run(Unknown Source:2)
E/StorageException(30544):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(30544):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(30544):  at java.lang.Thread.run(Thread.java:920)
E/flutter (30544): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: [firebase_storage/unknown] An unknown error occurred
E/flutter (30544): 

在我的例子中,当我直接按照Download到本地文件文档时,我必须更改文件的保存方式。我发现目标文件位置需要从文档中修改:

代替:

final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute}/images/island.jpg";

我把它改成:

final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute.path}/images/island.jpg";

问题是appDocDir.absolute返回Directory类,而不是String

最新更新