Firebase Auth・Storage・RealtimeDatabaseを使用した、名前とアイコンとともに画像を一枚だけ投稿するSNSアプリを作っています。
以下は投稿作成画面と投稿ボタンをタップした際に呼ばれるコードです。
swift
1 @IBAction func post(_ sender: Any) { 2 3 //セットした画像をエンコード 4 var data: Data = Data() 5 if let image = iconImageView.image { 6 data = UIImageJPEGRepresentation(image, 0.1)! as Data 7 } 8 9 10 //firebaseにpostを送る 11 let uid = Auth.auth().currentUser?.uid 12 13 let storageRef = Storage.storage().reference() 14 storageRef.child("posts").child(uid!).putData(data, metadata: nil) { metadata, error in 15 if error != nil { 16 17 } else { 18 19 let downloadURL = metadata!.downloadURL() 20 21 let url = String(describing: downloadURL) 22 let RDBref = Database.database().reference() 23 let post: Dictionary = ["postimage": url] 24 RDBref.child("posts").child(uid!).childByAutoId().setValue(post) 25 26 } 27 } 28 29 30 KRProgressHUD.showSuccess(withMessage: "送信しました") 31 32 //画面を閉じる 33 self.dismiss(animated: true, completion: nil) 34 }
Storageに画像をアップロードし、そのダウンロードURLをRealtimeDatabaseに参照として保存しています。
以上の様なアップロードの仕方だと、投稿画像が既存の画像に上書きされてしまい、複数のデータとして保存できませんでした。
プロフィール情報はこの様に1ユーザーに一つなので問題ないのですが、投稿データは1ユーザーにつき複数持てる(複数回の投稿が上書きではなくそれぞれ保存される)様にしたいです。
RealtimedatabaseではchildByAutoId()で上書きされない様な形を取れると思うのですが、Storageでその様に複数データとして保存していきたい場合はどう記述すれば良いのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/31 02:23