Firebase - FirebaseStorage
FirebaseStorage는 일종의 문서, 사진, 파일, 동영상을 저장하는 저장소라고 생각하면 됩니다.
과거 FirebaseStorage가 없었을 때에는 직접 리눅스 서버에 vsFTPd를 설치해서 파일서버를 만들어주거나 아니면 아마존 s3나 Azure의 block을 사서 써야 했습니다. 금액을 떠나서 과정이 복잡하고 까다로워서 따로 서버 개발자가 아니면 구축하기가 힘들었습니다 .
하지만 FirebaseStorage라이브러리를 설치하여 이용하면 손쉽게 FTP 서버를 구축할 수있습니다.
Firebase 콘솔에 내앱 추가하기, 프로젝트에 라이브러리 추가하기
먼저 https://console.firebase.google.com/ Firebase 콘솔창에 접속해
Project Overview오른쪽의 톱니바퀴를 눌러
프로젝트설정-> 앱추가 -> 패키지이름 입력
->google-services.json 파일 다운로드하여 -> 안드로이드스튜디오 app 아래에 넣어주기
그리고 gradle.build(모듈)의 dependencies에 아래 내용을 추가합니다
apply plugin: "com.google.gms.google-services"
그리고 gradle.build(프로젝트)
}
그리고 gradle.build의 dependencies에 아래 내용도 추가해줍니다
implementation 'com.google.firebase:firebase-storage:16.0.5'
그리고 파이어 베이스 콘솔로 이동합니다
콘솔에서 왼쪽의 storage 클릭 하고 시작하기
Firebase는 자동적으로 보안 규칙을 만들어줍니다. 위의 보안 규칙은
인증된 사용자만 사용할 수 있도록 지정되며 가장 기본적인 보안 규칙입니다.
storage에서 규칙을 누르면 보안 규칙을 보고 또 수정도 할 수 있습니다.
보안 규칙의 종류
인증된 사용자
1 | allow read, wirte: if request.auth != null; | cs |
인증된 사용자는 Firebase의 Authentication에 등록된 사용자만 사용할 수 있는 보안규칙으로
외부에서 제삼자가 악용하는 것을 막을 수 있습니다.
인증되지 않은 사용자
allow read, wirte: if true ;
Firebase Authentication에 등록되지 않은 사용자도 사용이 가능하며 개발을 위해서 빠른 테스트 요구할 때 많이 사용됩니다.
쓰기 금지
allow read, wirte: if false;
데이터베이스에 인증된 사용자든 아니든 쓰기를 금지합니다.
변수 선언, 인스턴스 얻기
Storage 업로드 하기
업로드 방법에는 여러가지가 있습니다.
1) ByteArrayOutputStream, FileInputStream(메모리)에 있는 파일을 올리는 방법
2) Uri(경로) 파일을 올리는방법
3) 직접 파일을 올리는 방법
1. ByteArrayOutputStream 업로드
메모리의 ByteArrayOutputStream에 있는 스트림 코드 putBytes를 통해 바로 FirebaseStorage로 올릴 수 있습니다.
2. FileInputStream 업로드
메모리의 FileInputStream에 있는 스트림 코드를 putStream으로 바로 FirebaseStorage로 업로드
3. FileUri(파일 경로 이용)업로드
Uri.from을 통해서 저장된 파일의 경로로 접근해서 바로 putFile로 파일을 올릴수 있습니다.
Storage 에서 다운로드하기
다운로드 방법에는 대표적으로 두가지가 있습니다.
1) 메모리에 다운로드 받는 방법
2) 스토리지에 저장하는 방법
둘의 중요한 차이점은 메모리로 저장하는 것은 앱이 종료되었을 때 저장된 데이터가 날아가는
방식입니다. 스토리지에 저장하는 방법은 앱이 종료되거나 스마트폰이 재부팅 되어도 데이터가 남아있습니다.
스토리지 방식은 우선 읽는 속도가 매우 느리며 자주 사용할 경우 쌓인 다운로드 데이터를 일일이 지워주어야 하는 단점이 있습니다.
다운로드 받기 위해서는 URL 주소가 필요합니다 . 발급받는 방법은 다운로드 완료 후
addOnCompleteListener 결과값이 넘어올 때 task.result.downloadUrl로 URL 주소를 받아오면 됩니다.
1. 메모리 저장
메모리 다운로드는 다운로드된 파일을 메모리에 저장할때 사용합니다.
FirebaseStorage.getInstance().reference.child(storage저장폴더명).child(파일이름)
.getBytes(Byte).addOnCompleteListener에서 다운로드된 byteArray를 받을 수 있습니다.
2. 스토리지 저장
스토리지 저장은 직접 안드로이드 폰 저장소에 저장하는 기능입니다.
메모리에 저장하고 싶지 않고 직접 안드로이드 저장소에 저장하고 싶을때 사용합니다.
사실 직접적으로 경로로 접근해서 쓰는 경우는 거의 없습니다.
직접적인 경로를 사용한다는 것은 보안상 좋지 않으며 또한 남들에게 파일이나 이미지를 공유할 때 굉장히 복잡한 경로로 제공해야 되는 경우가 발생합니다. 그렇기 때문에
보통 DownLoadUri 등을 통해서 URL 경로를 받아서 사용합니다.
FirebaseFileDownload 방법 모두 보기 - https://firebase.google.com/docs/storage/android/download-files?hl=ko#manage_downloads
파일 삭제하기
파일을 삭제하기 위해서는 간단히 파일 경로를 입력한 뒤 delete() 코드를 입력하면 됩니다.
위 모든 예 코드(권한요청, 변환 등등포함됨)
MainActivity.kt
}
activity_main.xml
'FireBase' 카테고리의 다른 글
Firebase - 푸시알림 보내기 (1) 콘솔로 푸시알림보내기,백그라운드 푸시알림 (13) | 2019.01.15 |
---|---|
Firebase 프로젝트 생성 및 연동하기 (2) | 2019.01.11 |
Firebase -데이터베이스(4) update,delete (5) | 2019.01.09 |
Firebase -데이터베이스(3) 데이터 Read, Puul Driven방식, Push Driven 방식 (4) | 2019.01.09 |
Firebase -데이터베이스(2) NoSQL구조, Firestore선언, create하기 (2) | 2019.01.09 |
댓글