How to save bitmap to Firebase

只谈情不闲聊 提交于 2019-12-18 07:12:06

问题


I created a simple application which crop the image . Now I want to save this image to the Fire base .

photo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //Intent imageDownload = new 
Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
      Intent imageDownload=new Intent();
      imageDownload.setAction(Intent.ACTION_GET_CONTENT);
      imageDownload.setType("image/*");
      imageDownload.putExtra("crop", "true");
      imageDownload.putExtra("aspectX", 1);
      imageDownload.putExtra("aspectY", 1);
      imageDownload.putExtra("outputX", 200);
      imageDownload.putExtra("outputY", 200);
      imageDownload.putExtra("return-data", true);
      startActivityForResult(imageDownload, GALLERY_REQUEST_CODE);


        }
    });
 }
  @Override
protected void onActivityResult(int requestCode, int resultCode, Intent 
  data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == GALLERY_REQUEST_CODE && resultCode == RESULT_OK && 
   data != null) {
        Bundle extras = data.getExtras();
        image = extras.getParcelable("data");
        photo.setImageBitmap(image);

   }






}

How to save this image to the Firebase . I tried many tutorial but could not succeed . Please verify with simple code .


回答1:


you must first add the dependencies for Firebase Storage to your build.gradle file:

compile 'com.google.firebase:firebase-storage:10.0.1'
compile 'com.google.firebase:firebase-auth:10.0.1'

then create an instance of FirebaseStorage:

FirebaseStorage storage = FirebaseStorage.getInstance();

To upload a file to Firebase Storage, you first create a reference to the full path of the file, including the file name.

// Create a storage reference from our app
StorageReference storageRef = storage.getReferenceFromUrl("gs://<your-bucket-name>");

// Create a reference to "mountains.jpg"
StorageReference mountainsRef = storageRef.child("mountains.jpg");

// Create a reference to 'images/mountains.jpg'
StorageReference mountainImagesRef = storageRef.child("images/mountains.jpg");

// While the file names are the same, the references point to different files
mountainsRef.getName().equals(mountainImagesRef.getName());    // true
mountainsRef.getPath().equals(mountainImagesRef.getPath());    // false

Once you've created an appropriate reference, you then call the putBytes(), putFile(), or putStream() method to upload the file to Firebase Storage.

The putBytes() method is the simplest way to upload a file to Firebase Storage. putBytes() takes a byte[] and returns an UploadTask that you can use to manage and monitor the status of the upload.

// Get the data from an ImageView as bytes
imageView.setDrawingCacheEnabled(true);
imageView.buildDrawingCache();
Bitmap bitmap = imageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();

UploadTask uploadTask = mountainsRef.putBytes(data);
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, and download URL.
        Uri downloadUrl = taskSnapshot.getDownloadUrl();
    }
});



回答2:


Firebase does not support binary data, so you need to convert the image data to base64 or use Firebase Storage

Method 1 ( Recommended )

 sref = FirebaseStorage.getInstance().getReference(); // please go to above link and setup firebase storage for android

 public void uploadFile(Uri imagUri) {
    if (imagUri != null) {

        final StorageReference imageRef = sref.child("android/media") // folder path in firebase storage
                .child(imagUri.getLastPathSegment());

        photoRef.putFile(imagUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot snapshot) {
                        // Get the download URL
                        Uri downloadUri = snapshot.getMetadata().getDownloadUrl();
                        // use this download url with imageview for viewing & store this linke to firebase message data

                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                         // show message on failure may be network/disk ?
                    }
                });
    }
}

Method 2

public void getImageData(Bitmap bmp) {  

  ByteArrayOutputStream bao = new ByteArrayOutputStream();
  bmp.compress(Bitmap.CompressFormat.PNG, 100, bao); // bmp is bitmap from user image file
  bmp.recycle();
  byte[] byteArray = bYtE.toByteArray();
  String imageB64 = Base64.encodeToString(byteArray, Base64.DEFAULT); 
  //  store & retrieve this string to firebase
  }


来源:https://stackoverflow.com/questions/40885860/how-to-save-bitmap-to-firebase

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!