how can I download image on firebase storage?

后端 未结 5 489
难免孤独
难免孤独 2021-01-06 14:53

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

this is my image

I try this but it is not working

storageR         


        
相关标签:
5条回答
  • 2021-01-06 15:19

    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
        }
    });
    

    • For more details Download Files on Android
    0 讨论(0)
  • 2021-01-06 15:22
    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));
    
        }
    
    }
    
    0 讨论(0)
  • 2021-01-06 15:26

    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);
    });
    
    0 讨论(0)
  • 2021-01-06 15:34

    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

    0 讨论(0)
  • 2021-01-06 15:37

    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
        }
    });
    
    0 讨论(0)
提交回复
热议问题