Firebase Storage에 이미지를 업로드하는 샘플을 만들어 보았다!
추가
샘플 프로젝트를 BitBucket에 올리고 있기 때문에 좋다면보십시오.
또한 Firebase에서 이미 프로젝트를 삭제했기 때문에 작동하지 않습니다.
자신의 것으로 바꾸고 나서 실험 등 부디
h tps : // / t t c c t. 오 rg / n s d n b / 푹신 푹신한 s 훼손 mp ぇ / src
환경
준비
위가 끝난 전제로
그건 그렇고, Podfile은
Podfile
use_frameworks!
target 'Sample' do
pod 'Firebase'
pod 'Firebase/Storage'
end
Firebase Storage 설정
우선은 룰로부터 설정합니다. 기본 설정이라면 인증을 하고 있는 사용자만 파일 업로드를 할 수 있는 설정인 것 같습니다.
이번에는 나 나름대로 적당하게 설정한 규칙을 둡니다.
StorageRule
service firebase.storage {
match /b/<YOUR-GS-URL>.appspot.com/o {
match /{allPaths=**} {
allow read:if request.auth != null;
allow write;
}
}
}
또한 규칙 작성에 도움이 된 사이트는 다음과 같습니다. 감사! !
htps : // g 납땜 ps. 오, ぇ. 코m/후우루m/#! 토피 c / 푹신한 lk / WCShG 2
의미로서는
read
에는 인증이 있다. write
누구나 할 수 있습니다! 라고 말한 느낌.이번은 업로드만이므로
write
는 인증 없이 OK로 했습니다.또한 다음과 같이 인증 없이 누구나 읽고 쓸 수 있습니다.
StorageRule
service firebase.storage {
match /b/<YOUR-GS-URL>.appspot.com/o {
match /{allPaths=**} {
allow read, write
}
}
}
구현
화면 자체는 이런 느낌의 버튼이 있을 뿐입니다.
이번에는 카메라 롤에서 이미지를 선택하여 업로드해 봅니다.
iOS10에서 구현했기 때문에
Info.plist
에 카메라 롤 사용 허가를 요구하는 것을 설정했습니다.Privacy - Photo Library Usage Description
를 추가하고 같은 것을 추가하십시오!실제로 카메라 롤에 액세스할 때 이런 식으로 경고가 표시됩니다!
실제로 사용한 소스 코드는 다음과 같습니다.
ViewController.swift
import UIKit
import Firebase
import FirebaseStorage
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let ud = UserDefaults.standard
ud.set(0, forKey: "count")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func selectImageWithLibrary(_ sender: AnyObject) {
pickImageFromLibrary()
}
func countPhoto() -> String {
let ud = UserDefaults.standard
let count = ud.object(forKey: "count") as! Int
ud.set(count + 1, forKey: "count")
return String(count)
}
}
// MARK: UINavigationControllerDelegate
extension ViewController: UINavigationControllerDelegate {
func pickImageFromLibrary() {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) {
let controller = UIImagePickerController()
controller.delegate = self
controller.sourceType = UIImagePickerControllerSourceType.photoLibrary
present(controller, animated: true, completion: nil)
}
}
}
// MARK: UIImagePickerControllerDelegate
extension ViewController: UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo
info: [String : Any]) {
let storage = FIRStorage.storage()
let storageRef = storage.reference(forURL: "gs://<YOUR-GS-APP>.appspot.com")
if let data = UIImagePNGRepresentation(info[UIImagePickerControllerOriginalImage] as! UIImage) {
let reference = storageRef.child("image/" + NSUUID().uuidString + "/" + countPhoto() + ".jpg")
reference.put(data, metadata: nil, completion: { metaData, error in
print(metaData)
print(error)
})
dismiss(animated: true, completion: nil)
}
}
}
흐름
0
를 추가했습니다. (시작시 매번 호출됩니다 ... 이것은 각자 수정 부탁드립니다) 완전한 것으로 하고 싶다면
UserDefaults
대신 Keychain
를 사용하여 계산을하는 것이 좋다고 생각합니다.결과
현재 디렉토리 아래
image/<UUID>/[0-9].jpg
의 형태로 저장할 수있었습니다!마지막으로
Firebase Storage의 업로드 용량이 약간 잊어버렸습니다만(누군가 말해 주세요), 이것을 사용하면 간단한 공유 앱이라든지 만들 수 있을 것 같네요!
Reference
이 문제에 관하여(Firebase Storage에 이미지를 업로드하는 샘플을 만들어 보았다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nnsnodnb/items/8464369f9c9160f49634텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)