본문 바로가기
AndroidStudio

Firebase :google 클라우드 백엔드 플랫폼: storage

by EUN-JI 2023. 9. 7.

gradle :모듈앱  :기본 설정

plugins {
    id 'com.google.gms.google-services'
}
dependencies {
    //파이어베이스 core library
    implementation platform('com.google.firebase:firebase-bom:32.2.3')
    //파이어베이스 cloud Storage library
    implementation("com.google.firebase:firebase-storage")
}

gradle : project설정

plugins {
    id 'com.google.gms.google-services' version '4.3.15' apply false
}

<xml>ex70

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_load"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="load image from firebase storage"/>

    <ImageView
        android:id="@+id/iv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <Button
        android:id="@+id/btn_select"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="select image"/>
    <Button
        android:id="@+id/btn_upload"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/black"
        android:text="upload image to firebase storage"/>



</LinearLayout>

<java>

package com.eunji0118.ex70firebasestorage;

import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.eunji0118.ex70firebasestorage.databinding.ActivityMainBinding;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;
    Uri imguri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        binding=ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        binding.btnLoad.setOnClickListener(view -> clickLoad());
        binding.btnSelect.setOnClickListener(view -> clickSelect());
        binding.btnUpload.setOnClickListener(view -> clickUpload());
    }

    void clickSelect(){
        Intent intent=new Intent(MediaStore.ACTION_PICK_IMAGES);
        //3
        resultLauncher.launch(intent);
    }

    ActivityResultLauncher<Intent> resultLauncher=registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),result -> {
        if (result.getResultCode()==RESULT_CANCELED) return;
        //데이타 인텐트, uri 2
        imguri= result.getData().getData();
        Glide.with(this).load(imguri).into(binding.iv);
    });
    void clickUpload(){
        FirebaseStorage firebaseStorage= FirebaseStorage.getInstance();
        //.jpg 꼭 안써도됨. 새로운거 생길때
        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
        String name= "IMG_"+sdf.format(new Date());
        StorageReference imgRef= firebaseStorage.getReference("uplooads"+name);
        //폴더가 없으면 만들어줌. 폴더를..

        imgRef.putFile(imguri).addOnSuccessListener(taskSnapshot -> {
            Toast.makeText(this, "success upload", Toast.LENGTH_SHORT).show();
        });

    }

    void clickLoad(){

        //Firebase Storage 관리객체 소환하기
        FirebaseStorage firebaseStorage= FirebaseStorage.getInstance();

        //저장소의 특정 위치를 참조하는 참조객체
        StorageReference rootref= firebaseStorage.getReference();  //최상위 root위치를 참조

        //읽어오길 원하는 파일의 참조객체를 얻어오기
        StorageReference imgRef= rootref.child("paris.jpg");  //파일이름

        imgRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                Glide.with(MainActivity.this).load(uri).into(binding.iv);
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.i("Ex70",e.getMessage());
            }//fail일때 확인 가능
        });
    }
}