java - 如何使用此 uri 上传到 firebase 存储?

标签 java android firebase

如果 imageUri 是这种形式,则上传成功。 content://com.android.providers.media.documents/document/image%3A12305

但是这个表单失败了
/文件/图像:10674

我收到了这条 Toast 消息。

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

如果你能给我任何提示,我将不胜感激。

我尝试过的

1.从图库中获取图片

Uri imageUri;
StorageTask uploadTask;
StorageReference storageReference;

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    File compressedImageFile; //for compress library : https://github.com/zetbaitsu/Compressor

    if (requestCode == IMAGE_REQUEST && resultCode == RESULT_OK
            && data != null && data.getData() != null) {

        Uri selectedImageUri = data.getData();

        try {
            compressedImageFile = new Compressor(getContext()).compressToFile(new File(selectedImageUri.getPath()));

            imageUri = data.getData(); //this works well but uploaded original size.
//                imageUri =Uri.fromFile(compressedImageFile); //fail
//                imageUri= Uri.fromFile(new File(compressedImageFile.toURI().getPath())); //fail
//                imageUri= Uri.parse(new File(compressedImageFile.getPath()).toString()); //fail

            if (uploadTask != null && uploadTask.isInProgress()) {
                Toast.makeText(getContext(), "Upload in preogress", Toast.LENGTH_SHORT).show();
            } else {
                uploadImage();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.上传图片();

 if (imageUri != null) {
        final StorageReference fileReference = storageReference.child(System.currentTimeMillis()
                + "." + getFileExtension(imageUri));

        uploadTask = fileReference.putFile(imageUri);
        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();
                }
                return fileReference.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {                      
                    Uri downloadUri = task.getResult();
                    String mUri = downloadUri.toString();

                    reference = FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());
                    HashMap<String, Object> map = new HashMap<>();
                    map.put("imageURL", "" + mUri);
                    reference.updateChildren(map);                        
                } else {                       
                    Toast.makeText(getContext(), "Failed!", Toast.LENGTH_SHORT).show();

                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();

            }
        });
    }

最佳答案

По пробуйте это

StorageReference riversRef = 
storageRef.child("images/"+imageUri.getLastPathSegment());
uploadTask = riversRef.putFile(imageUri);

// Register observers to listen for when the download is done or if it 
//fails
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
    // Handle unsuccessful uploads
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
    // taskSnapshot.getMetadata() contains file metadata such as size, 
   //content-type, etc.
  
   }
   });

关于java - 如何使用此 uri 上传到 firebase 存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871426/

相关文章:

android - 自定义 View RatingBar 调用了 setOnTouchListener 但没有覆盖 performClick

objective-c - 如何修复 : "No visible @interface for ' FIRInstanceID' declares the selector 'token' "in iOS build in Flutter

php - 使用 PHP 在 firebase 上创建主题

JavaFX TableView 性能问题

java - 用于 Crystal Reports 的 Oracle JDBC 瘦驱动程序放在哪里?

javascript - react 导航 4 中的不变违规 : The navigation prop is missing for this navigator.

java - 无法获取 BottomNavigationView 的 id

database - Cloud Firestore 文档锁定

java - 在JAVA中用线条绘制形状

java - 重载方法如何工作?