首页 > 解决方案 > 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.

标签: androidfirebase-storage

解决方案


推荐阅读