无法将图片上传到Firebase存储

时间:2020-10-16 05:28:43

标签: java android image firebase google-cloud-storage

我正在将Firebase图片上传到存储。当我在运行于Android 7.0的Tab上使用该代码时,此代码工作正常,并且上传了图片。我在此应用中遇到了在Android 10上上传图片的问题。当我尝试上传图片时说:

“发生StorageException。 发生未知错误,请检查HTTP结果代码和服务器响应的内部异常。 代码:-13000 HttpResult:0“

图片上传代码:

private void uploadFile(final Context context, final FirebaseDatabase databaseReference, FirebaseStorage storageReference, Uri fileUri, final String sender, final String receiver, final String type) {

    final Uri[] downloadUri = new Uri[1];
    StorageReference filePath = null;
    UploadTask uploadTask;

    if (fileUri != null) {

        DatabaseReference ref = databaseReference.getReference().child("Messages");
        String messageID = ref.push().getKey();

        switch (type) {
            case "image":
                filePath = storageReference.getReference().child("Images/").child(messageID + ".jpg");
                break;

            case "pdf":
                filePath = storageReference.getReference().child("PDF Files/").child(messageID + "." + type);
                break;

            case "docx":
                filePath = storageReference.getReference().child("Docx Files/").child(messageID + "." + type);
                break;
        }
        Uri uploadUri = Uri.fromFile(new File(fileUri.toString()));
        uploadTask = filePath.putFile(uploadUri);
        final StorageReference finalFilePath = filePath;
        Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
            @Override
            public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                if (!task.isSuccessful()) {
                    throw task.getException();
                }

                // Continue with the task to get the download URL
                return finalFilePath.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    downloadUri[0] = task.getResult();
                  
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show();
            }
        });

    }
}


public void sendMessage(Context context, Uri fileUri, final String sender, final String receiver, String msgType)
{
    FirebaseDatabase databaseReference = FirebaseDatabase.getInstance();
    FirebaseStorage storageReference = FirebaseStorage.getInstance();

    uploadFile(context, databaseReference, storageReference, fileUri, sender, receiver, msgType);
}

方法调用:

firebaseMessageController.sendMessage(this, Uri.fromFile(new File(photos.get(i))), patientEmail, doctorEmail, "image");

依赖项:

implementation "com.google.firebase:firebase-auth:19.3.0"
implementation 'com.google.firebase:firebase-database:19.2.1'
implementation 'com.google.firebase:firebase-crashlytics:17.2.2'
implementation 'com.google.firebase:firebase-messaging:20.2.0'
implementation 'com.google.firebase:firebase-storage:19.1.1'

Logcat:

2020-10-16 10:15:16.816 8077-10501/com.webdoc.patient W/StorageTask: unable to change internal state to: INTERNAL_STATE_CANCELED isUser: false from state:INTERNAL_STATE_IN_PROGRESS
2020-10-16 10:15:16.816 8077-10501/com.webdoc.patient E/StorageException: StorageException has occurred.
    An unknown error occurred, please check the HTTP result code and inner exception for server response.
     Code: -13000 HttpResult: 0
2020-10-16 10:15:16.817 8077-10501/com.webdoc.patient E/StorageException: /file:/storage/emulated/0/WhatsApp/Media/WhatsApp%20Images/IMG-20201015-WA0001.jpg: open failed: ENOENT (No such file or directory)
    java.io.FileNotFoundException: /file:/storage/emulated/0/WhatsApp/Media/WhatsApp%20Images/IMG-20201015-WA0001.jpg: open failed: ENOENT (No such file or directory)
        at libcore.io.IoBridge.open(IoBridge.java:496)
        at java.io.FileInputStream.<init>(FileInputStream.java:159)
        at java.io.FileInputStream.<init>(FileInputStream.java:115)
        at android.content.ContentResolver.openInputStream(ContentResolver.java:1196)
        at com.google.firebase.storage.UploadTask.<init>(com.google.firebase:firebase-storage@@19.1.1:131)
        at com.google.firebase.storage.StorageReference.putFile(com.google.firebase:firebase-storage@@19.1.1:240)
        at com.webdoc.patient.FirebaseChat.FirebaseMessageController.FirebaseMessageController.uploadFile(FirebaseMessageController.java:297)
        at com.webdoc.patient.FirebaseChat.FirebaseMessageController.FirebaseMessageController.sendMessage(FirebaseMessageController.java:333)
        at com.webdoc.patient.FirebaseChat.MessagesActivity.onActivityResult(MessagesActivity.java:350)
        at android.app.Activity.dispatchActivityResult(Activity.java:8413)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:5464)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:5512)
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:213)
        at android.app.ActivityThread.main(ActivityThread.java:8178)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
     Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
        at libcore.io.Linux.open(Native Method)
        at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
        at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
        at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
        at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8046)
        at libcore.io.IoBridge.open(IoBridge.java:482)
        at java.io.FileInputStream.<init>(FileInputStream.java:159) 
        at java.io.FileInputStream.<init>(FileInputStream.java:115) 
        at android.content.ContentResolver.openInputStream(ContentResolver.java:1196) 
        at com.google.firebase.storage.UploadTask.<init>(com.google.firebase:firebase-storage@@19.1.1:131) 
        at com.google.firebase.storage.StorageReference.putFile(com.google.firebase:firebase-storage@@19.1.1:240) 
        at com.webdoc.patient.FirebaseChat.FirebaseMessageController.FirebaseMessageController.uploadFile(FirebaseMessageController.java:297) 
        at com.webdoc.patient.FirebaseChat.FirebaseMessageController.FirebaseMessageController.sendMessage(FirebaseMessageController.java:333) 
        at com.webdoc.patient.FirebaseChat.MessagesActivity.onActivityResult(MessagesActivity.java:350) 
        at android.app.Activity.dispatchActivityResult(Activity.java:8413) 
        at android.app.ActivityThread.deliverResults(ActivityThread.java:5464) 
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:5512) 
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:213) 
        at android.app.ActivityThread.main(ActivityThread.java:8178) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101) 

我在做什么错?有人可以帮忙吗?相同的代码可以在另一个应用程序上正常工作。

0 个答案:

没有答案