我正在将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)
我在做什么错?有人可以帮忙吗?相同的代码可以在另一个应用程序上正常工作。