android - Firebase 存储 IO 异常
问题描述
我一直在尝试从 Firebase Storage 下载 PDF 文件并将其存储在本地存储中,而不是外部存储中。
发生异常:
com.google.firebase.storage.StorageException:发生未知错误,请检查 HTTP 结果代码和服务器响应的内部异常。
下载文件并存储的代码:
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReferenceFromUrl(fileDetails.getFileUrl());
File rootPath = new File(Environment.getDataDirectory(), "notesApp");
if (!rootPath.exists()) {
rootPath.mkdirs();
}
final File myFile = new File(rootPath,fileDetails.getFileName()+".pdf");
storageRef.getFile(myFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
// Local temp file has been created
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
Log.e("Download Failed: ",exception.toString());
}
});
Logcat 异常:
java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively0(Native Method)
at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:281)
at java.io.File.createNewFile(File.java:1008)
at com.google.firebase.storage.FileDownloadTask.processResponse(com.google.firebase:firebase-storage@@19.0.1:136)
at com.google.firebase.storage.FileDownloadTask.run(com.google.firebase:firebase-storage@@19.0.1:227)
at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(com.google.firebase:firebase-storage@@19.0.1:1072)
at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
2019-09-18 20:38:01.109 32195-32312/com.example.android.notes E/StorageException: StorageException has occurred.
An unknown error occurred, please check the HTTP result code and inner exception for server response.
Code: -13000 HttpResult: 200
2019-09-18 20:38:01.156 32195-32312/com.example.android.notes E/StorageException: No such file or directory
java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively0(Native Method)
at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:281)
at java.io.File.createNewFile(File.java:1008)
at com.google.firebase.storage.FileDownloadTask.processResponse(com.google.firebase:firebase-storage@@19.0.1:136)
at com.google.firebase.storage.FileDownloadTask.run(com.google.firebase:firebase-storage@@19.0.1:227)
at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(com.google.firebase:firebase-storage@@19.0.1:1072)
at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
2019-09-18 20:38:01.163 32195-32312/com.example.android.notes E/StorageException: StorageException has occurred.
An unknown error occurred, please check the HTTP result code and inner exception for server response.
Code: -13000 HttpResult: 200
2019-09-18 20:38:01.242 32195-32312/com.example.android.notes E/StorageException: No such file or directory
java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively0(Native Method)
at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:281)
at java.io.File.createNewFile(File.java:1008)
at com.google.firebase.storage.FileDownloadTask.processResponse(com.google.firebase:firebase-storage@@19.0.1:136)
at com.google.firebase.storage.FileDownloadTask.run(com.google.firebase:firebase-storage@@19.0.1:227)
at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(com.google.firebase:firebase-storage@@19.0.1:1072)
at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
2019-09-18 20:38:40.889 32195-32195/com.example.android.notes E/Download Failed:: com.google.firebase.storage.StorageException: An unknown error occurred, please check the HTTP result code and inner exception for server response.
编辑:
替换 File rootPath = new File(Environment.getDataDirectory(), "notesApp");
为
File rootPath = new File(getBaseContext().getFilesDir(), "notesApp");
现在唯一显示的错误是:
error getting token java.util.concurrent.ExecutionException: com.google.firebase.internal.api.FirebaseNoSignedInUserException: Please sign in before trying to get a token.
解决方案
推荐阅读
- javascript - 如何将 C3 Gauge Chart 集成到 Angular 5 中?
- vtk - 在 C++ 中使用 ITK 读取 Nifti 图像
- php - PHP/SQL 查询不会执行
- java - 为 RecyclerView 中的某些行禁用 ItemTouchHelper 滑动
- css - 无限雪佛龙线
- mysql - Docker 构建:错误:ER_NOT_SUPPORTED_AUTH_MODE:MySQL 客户端
- javascript - 动态创建数组
- php - 将图像保存到 PHP 中的目录?
- php - PHP Pdo SELECT VIEW 查询失败
- graphics - 为什么directx9 AddDirtyRect 在英特尔集成显卡上会导致内存冲突?