안드로이드 앱을 개발할 때 서버단 작업을 코딩 한줄없이 사용하는 플랫폼
구글 로그인 필요
Gradle : Project 에 속성 추가
Gradle : app 에 속성 추가
스토리지 빌리기
룰 수정
이미지 경로 확인하는 곳
<?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:text="load img from firebase storage"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<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:text="select"
android:backgroundTint="@color/teal_700"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn_upload"
android:text="upload img to firebase storage"
android:backgroundTint="@color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Firebase Storage에 저장되어 있는 이미지 파일 읽어오기
StorageReference
Corsur 처럼 위치를 가르키는 친구
package com.bsj0420.ex88firebasestorage;
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.icu.text.SimpleDateFormat;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.Toast;
import com.bsj0420.ex88firebasestorage.databinding.ActivityMainBinding;
import com.bumptech.glide.Glide;
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 com.google.firebase.storage.UploadTask;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
// firebase - 안드로이드 앱을 개발할 때 서버단 작업을 코딩 한줄없이 사용하는 플랫폼
// 1. 이 프로젝트와 firebase 플랫폼 연동하기 (가이드 문서 참고)
// firebase 사이트에 로그인하고 console에서 [프로젝트 만들기] 를 통해 작업지시
ActivityMainBinding binding;
@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());
}
private void clickLoad() {
//Firebase Storage에 저장되어 있는 이미지 파일 읽어와보기
//Firebase Storage 관리객체 소환 - 서버통신 끝 (인터넷 퍼미션도 필요없음 다 알아서 함)
FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
//저장소의 최상위 참조객체 얻어오기
//위치를 가르키는 친구가 있음
StorageReference rootRef = firebaseStorage.getReference();
//읽어오길 원하는 파일의 참조객체 얻어오기
StorageReference imgRef = rootRef.child("ms18.png");
if(imgRef != null) {
//파일참조 객체로부터 이미지의 다운로드 url(엑세스토큰) 을 얻어오기
imgRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Glide.with(MainActivity.this).load(uri).into(binding.iv);
}
});
}
// getDownloadUrl() 비동기 형식이라 addOnSuccessListener 필요
}
}
package com.bsj0420.ex88firebasestorage;
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.icu.text.SimpleDateFormat;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.Toast;
import com.bsj0420.ex88firebasestorage.databinding.ActivityMainBinding;
import com.bumptech.glide.Glide;
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 com.google.firebase.storage.UploadTask;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
// firebase - 안드로이드 앱을 개발할 때 서버단 작업을 코딩 한줄없이 사용하는 플랫폼
// 1. 이 프로젝트와 firebase 플랫폼 연동하기 (가이드 문서 참고)
// firebase 사이트에 로그인하고 console에서 [프로젝트 만들기] 를 통해 작업지시
ActivityMainBinding binding;
@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());
}
private void clickSelect() {
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
resultLauncher.launch(intent);
}
//선택된 이미지 Uri
Uri imgUri = null;
ActivityResultLauncher<Intent> resultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == RESULT_CANCELED) return;
imgUri = result.getData().getData();
Glide.with(this).load(imgUri).into(binding.iv);
});
private void clickUpLoad() {
if(imgUri == null) return; //사진 선택 안했으면 하지마
//Firebase Storage에 파일 업로드
//파이어베어스 관리 저장소 일단 소환
FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
//저장할 파일 이름이 중복되지 않도록 날짜 붙여주기
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String fileName = "IMG_" + sdf.format(new Date()) + ".png";
//저장할 파일 위치에 대한 참조객체
StorageReference imgRef = firebaseStorage.getReference("photo/"+fileName); //저장할 이름
//폴더가 없으면 만들고 있으면 그냥 참조한다
//위 저장 경로 참조객체에게 실제파일 업로드 시키기
imgRef.putFile(imgUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(MainActivity.this, "업로드 성공", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "error : " + e, Toast.LENGTH_SHORT).show();
}
});
}