Ios 如何将多个图像保存到firebase?
目前,我有一个应用程序,当用户拍照时,它会自动保存在存储器中,然后我会在存储器中保存图像的url。但每当我添加新图像时,它只是将旧图像更改为新图像。我想添加新的。最终目标是让用户能够在其帐户下保存他带到firebase的一系列图像 下面是我保存用户拍摄的图像的代码:Ios 如何将多个图像保存到firebase?,ios,swift,image,firebase,firebase-storage,Ios,Swift,Image,Firebase,Firebase Storage,目前,我有一个应用程序,当用户拍照时,它会自动保存在存储器中,然后我会在存储器中保存图像的url。但每当我添加新图像时,它只是将旧图像更改为新图像。我想添加新的。最终目标是让用户能够在其帐户下保存他带到firebase的一系列图像 下面是我保存用户拍摄的图像的代码: func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let userPickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
// let imageToUse = PhotoArray()
// let data = UIImagePNGRepresentation(userPickedImage) //here convert to data
PhotoArray.sharedInstance.photosArray.append(userPickedImage) //append converted data in array
// do {
// try realm.write {
// realm.add(imageToUse)
// }
// } catch {
// print(“error adding image to array\(error)“)
// }
imageView.image = userPickedImage
//-----------------------------//
//Create a reference to the image
let imageRef = Storage.storage().reference().child("image.jpg")
// Get image data
if let uploadData = UIImagePNGRepresentation(userPickedImage) {
// Upload image to Firebase Cloud Storage
imageRef.putData(uploadData, metadata: nil) { (metadata, error) in
guard error == nil else {
// Handle error
return
}
// Get full image url
imageRef.downloadURL { (url, error) in
guard let downloadURL = url else {
// Handle error
return
}
// Save url to database
Firestore.firestore().collection("images").document("myImage").setData(["imageUrl" : downloadURL.absoluteString])
}
}
}
//-----------------------------//
}
// print(PhotoArray().photosArray.count)
imagePicker.dismiss(animated: true, completion: nil)
}
无法将图像保存到Firebase Cloud Firestore。您可以尝试使用Firebase云存储,方法是转到Google并搜索Firebase云存储文档。以下是我如何使用Firebase存储保存多个图像的一个小片段。我调用了uploadProfileImage()两次,并在存储路径中设置了nsuid().uuidString,因此基本上在调用函数的每个实例上,调用的时间都会略有不同,并且不会覆盖:)
我想我已经能够做到了。但正如我的问题所述,它并没有按预期的那样发挥作用。你是说这不是个好主意吗?我该怎么做?怎么做?好吧,我一时想不起来,但我猜你可以使用云存储。如果你只是在谷歌上搜索Firebase云存储文档,他们会告诉你如何使用它。
@IBAction func saveImages(_ sender: Any) {
self.uploadProfileImage(frontImage!) { url in
if url != nil {
print("success")
} else {
print("failed!")
}
}
self.uploadProfileImage(backImage!) { url in
if url != nil {
print("success")
} else {
print("failed!")
}
}
dismiss(animated: false, completion: nil)
}
func uploadProfileImage(_ image:UIImage, completion: @escaping ((_ url:URL?)->())) {
guard let uid = Auth.auth().currentUser?.uid else { return }
let imageTime = NSUUID().uuidString
let storageRef = Storage.storage().reference().child("users/\(uid)/\(imageTime)")
let imageData = image.jpegData(compressionQuality: 0.75)
let metaData = StorageMetadata()
metaData.contentType = "image/jpg"
storageRef.putData(imageData!, metadata: metaData) { metaData, error in
if error == nil, metaData != nil {
storageRef.downloadURL{ url, error in
completion(url)
}
}
else {
completion(nil)
}
}
}