作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
为什么这行不通?如何让所有功能运行并执行其任务?我正在尝试将 2 张图像上传到我的 firebase 存储中,并在我的 firebase 数据库(帖子内)中获取图像的两个下载 URL。如果第二张图片不存在,我如何让它忽略它?
@IBAction func pickImage1(_ sender: Any) {
let image = UIImagePickerController()
image.delegate = self
image.sourceType = UIImagePickerControllerSourceType.photoLibrary
image.allowsEditing = false
selected = 1
self.present(image, animated: true)
}
//Add didFinishPickingMediaWithInfo here
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
if selected == 1 {
myImageView1.image = image
} else {
myImageView2.image = image
}
}
else {
//error
}
self.dismiss(animated: true, completion: nil)
}
@IBAction func pickImage2(_ sender: Any) {
let image2 = UIImagePickerController()
image2.delegate = self
image2.sourceType = UIImagePickerControllerSourceType.photoLibrary
image2.allowsEditing = false
selected = 2
self.present(image2, animated: true)
}
@IBAction func upload(_ sender: Any) {
if let image1 = myImageView1.image {
guard let data = UIImagePNGRepresentation(image1) else { return }
let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image.png")
storageRef.putData(data, metadata: nil, completion: { (metadata, error) in
if error != nil {
print("error")
return
}
else {
let downloadURL = metadata?.downloadURL()?.absoluteString
self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (downloadURL)])
return
}
})
}
if let image2 = myImageView2.image {
guard let data = UIImagePNGRepresentation(image2) else { return }
let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image1.png")
storageRef.putData(data, metadata: nil, completion: { (metadata, error) in
if error != nil {
print("error")
return
}
else {
let downloadURL = metadata?.downloadURL()?.absoluteString
let downloadURL2 = metadata?.downloadURL()?.absoluteString
self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (downloadURL), "Download URL 2": (downloadURL2)])
}
})
}
最佳答案
要检查文件是否已存在,您需要调用 storageRef.metadataWithCompletion
。
打开一个可选的图像你可以这样做
如果让 image = self.myImageView2.image 为? UIImage {//上传它 }
编辑
类似这样的东西
if let image = imageView.image {
guard let data = UIImagePNGRepresentation(image) else { return }
let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image.png")
storageRef.putData(data, metadata: nil, completion: { (metadata, error) in
// Handle it
}
}
if let image1 = imageView1.image {
guard let data = UIImagePNGRepresentation(image1) else { return }
let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image1.png")
storageRef.putData(data, metadata: nil, completion: { (metadata, error) in
// Handle it
}
}
还要确保您已通过 Firebase 的身份验证,否则上传将失败。检查控制台,它会告诉您身份验证是否失败。
EDIT2
这应该可以解决问题。
func upload(image: UIImage, completion: @escaping (String?) -> ()) {
guard let data = UIImagePNGRepresentation(image) else { return completion(nil)}
let storageRef = databaseStorage.child("images/\(NSUUID().uuidString)/image.png")
storageRef.putData(data, metadata: nil) { (metaData, error) in
if error != nil {
print(error?.localizedDescription ?? "Failed to upload image")
} else if metaData != nil && metaData?.downloadURL() != nil {
completion(metaData?.downloadURL()!.absoluteString)
} else {
completion(nil)
}
}
}
func upload() {
if imageView.image == nil && imageView1.image == nil {
return;
}
if let image = imageView.image {
upload(image: image, completion: { [weak self] (url) in
if let image1 = self?.imageView1.image {
self?.upload(image: image1, completion: { (url1) in
if url == nil && url1 == nil {
return
} else if url == nil {
self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL1": (url1)])
} else if url1 == nil {
self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (url)])
} else {
self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (url), "Download URL1" : (url1)])
}
})
}
})
} else {
if let image1 = self.imageView1.image {
self.upload(image: image1, completion: { (url1) in
if (url1 == nil) {
return
}
self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (url)])
})
}
}
}
关于ios - 如何同时上传 2 张图片到 Firebase Storage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44832057/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!