CompEng
CompEng

Reputation: 7396

how can I download image on firebase storage?

I want to download image on firebase storage in android app.

this is my image

enter image description here

I try this but it is not working

storageRef.child("1/1.jpg").getDownloadUrl().getResult(); 

Upvotes: 3

Views: 41177

Answers (6)

Nartha
Nartha

Reputation: 1

Try this: kotlin

 val storageFirebase = Firebase.storage
 val fullUrl = "gs://[bucket name]/[Folder]/[FileName]"  or 
               "gs://[bucket name]/[FileName]"
    
// Create a reference to a file from a Google Cloud Storage URI
   storageFirebase.getReferenceFromUrl(fullUrl).downloadUrl
   .addOnSuccessListener { urlImage -> 
   { Glide.with(context).load(urlImage).into(imageView) }
     .addOnFailureListener {  Toast.makeText(context, it.message, Toast.LENGTH_SHORT).show() }

reference: https://firebase.google.com/docs/storage/android/download-files

Upvotes: 0

Carol Skelly
Carol Skelly

Reputation: 362780

I'm a little late on this question. I encountered this same problem, but getting the URL (ie: getDownloadUrl() as shown in the Firebase docs) for the file doesn't address the entire problem which is downloading the file.

This is because sending a download (or attachment) response to the browser requires the file content (not the URL). In order to get the URL and obtain the actual file content requires an HTTP request which isn't an option for us using the free Spark Firebase account.

To get around this, I used the download() method from the storage bucket which allowed me save the storage file as a local tmp file. Then I used an fs read stream to pipe the file content to the cloud function response...

const fireapp = '<thebucket>.appspot.com';
const gcs = require('@google-cloud/storage')({keyFilename:'serviceAccount.json'});
const bucket = gcs.bucket(fireapp);

// storage path
let fn = 'folder/theimage.png';

// allow CORS
res.set('Access-Control-Allow-Origin', '*');

// download w/o external http request 
// by download file from bucket
// and saving to tmp folder
const tempFilePath = path.join(os.tmpdir(), "tmpfile.jpg");
bucket.file(fn).download({destination: tempFilePath}).then(()=>{
    console.log('Image downloaded locally to', tempFilePath);
    var filestream = fs.createReadStream(tempFilePath);
    filestream.pipe(response);
});

Upvotes: 4

Gowthaman M
Gowthaman M

Reputation: 8282

Try this

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

// Create a reference with an initial file path and name
StorageReference pathReference = storageRef.child("users/me/yourpics.png");



storageRef.child("users/me/yourpics.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                // Got the download URL for 'users/me/profile.png'
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle any errors
            }
        });

Download-files

https://firebase.google.com/docs/storage/android/download-files

Upvotes: 2

Vishal Yadav
Vishal Yadav

Reputation: 1024

Try this


// Create a storage reference from our app
StorageReference storageRef = storage.getReference();

// Or Create a reference to a file from a Google Cloud Storage URI
StorageReference gsReference = 
    storage.getReferenceFromUrl("gs://bucket/images/stars.jpg");


/*In this case we'll use this kind of reference*/
//Download file in Memory
StorageReference islandRef = storageRef.child("images/island.jpg");

final long ONE_MEGABYTE = 1024 * 1024;
islandRef.getBytes(ONE_MEGABYTE).addOnSuccessListener(new         
OnSuccessListener<byte[]>() {
    @Override
    public void onSuccess(byte[] bytes) {
        // Data for "images/island.jpg" is returns, use this as needed
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle any errors
    }
});

Upvotes: 6

Pradeep Sheoran
Pradeep Sheoran

Reputation: 493

package com.example.package.myfirestore;

import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;

import java.io.IOException;
import java.net.URI;

/**
 * Created by Yeshveer on 6/9/2018.
 */

public class UploadImg extends AppCompatActivity{
    private TextView textView1;
    private ImageView img1;
    private EditText edittext1;
    private Button Btn1;
    private Button Btn2;
    int Image_requestcode=7;
    ProgressDialog pd;
    Uri filpath;
    FirebaseStorage storage1;
    StorageReference storageReference;
    StorageReference storageReference2;
    FirebaseFirestore db;

  FirebaseStorage storage;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView1 = (TextView) findViewById(R.id.textView1);
        img1 = (ImageView) findViewById(R.id.img1);
        edittext1 = (EditText) findViewById(R.id.edittext1);
        Btn1 = (Button) findViewById(R.id.Btn1);
        Btn2 = (Button) findViewById(R.id.Btn2);

        // Create Storage Referece
        storage1=FirebaseStorage.getInstance();
        storageReference = storage1.getReference();

        //PD details
        pd=new ProgressDialog(this);
        pd.setTitle("Uploading Image");



// Image Chooser
        Btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Creating Intent
                Intent intent = new Intent();

                //Setting Intent of Image type and select Image from Mobile Storage
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Please Select Image"), Image_requestcode);
            }
        });

        Btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                UploadingStart();
            }
        });
    }

    private void UploadingStart() {
        // Image path Print

        textView1.setText(GetFileExtension(filpath));
        pd.show();
        storageReference2=storageReference.child("images/"+"hello"+"."+GetFileExtension(filpath));
        storageReference2.putFile(filpath)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        pd.dismiss();
                        Toast.makeText(UploadImg.this, "Uploaded Successfully", Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        pd.dismiss();
                        Toast.makeText(UploadImg.this, "Error in Uploading, Please check Internet connection", Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        double progress=(100.0* taskSnapshot.getBytesTransferred()/taskSnapshot.getTotalByteCount());
                        pd.setMessage("Progress is "+(int)progress+"%");
                    }
                });



    }


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

        if(requestCode==Image_requestcode && resultCode==RESULT_OK && data != null && data.getData() != null){
            filpath=data.getData();

            try {
                // Image content resolver
                Bitmap bitmap= MediaStore.Images.Media.getBitmap(getContentResolver(),filpath);
                img1.setImageBitmap(bitmap);


            } catch (IOException e) {
                e.printStackTrace();
            }


        }
    }



    // Method for file etention and path
    public String GetFileExtension(Uri uri){
        ContentResolver contentResolver=getContentResolver();
        MimeTypeMap mimeTypeMap=MimeTypeMap.getSingleton();

        // Return file Extension
        return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));

    }

}

Upvotes: 0

Zohra Khan
Zohra Khan

Reputation: 5302

To download a file, first create a Cloud Storage reference to the file you want to download.

You can create a reference by appending child paths to the storage root, or you can create a reference from an existing gs:// or https:// URL referencing an object in Cloud Storage.

// Create a storage reference from our app
StorageReference storageRef = storage.getReference();

// Create a reference with an initial file path and name
StorageReference pathReference = storageRef.child("images/stars.jpg");

images is the child of root.

storageRef.child("images/stars.jpg").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        // Got the download URL for 'users/me/profile.png'
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle any errors
    }
});

Upvotes: 2

Related Questions