【问题标题】:Save two different images at the same time on firebase在firebase上同时保存两个不同的图像
【发布时间】:2019-01-07 15:12:28
【问题描述】:

我尝试在一个存储位置同时保存两张不同的图像

这是我保存信息的功能

var text: String = ""
var addedByUser: String?
var userImage: UIImage?
var jobImage: UIImage!
var downloadURL: String?
var userDownloadURL: String?
let ref: DatabaseReference!

init(text: String? = nil, jobImage: UIImage? = nil, addedByUser: String? = nil, userImage: UIImage? = nil) {
    self.text = text!
    self.jobImage = jobImage
    self.addedByUser = addedByUser
    self.userImage = userImage
    ref = Database.database().reference().child("jobs").childByAutoId()
}

init(snapshot: DataSnapshot){
    ref = snapshot.ref
    if let value = snapshot.value as? [String : Any] {
        text = value["text"] as! String
        addedByUser = value["addedByUser"] as? String
        downloadURL = value["imageDownloadURL"] as? String
        userDownloadURL = value["imageUserDownloadURL"] as? String
    }
}

func save() {
    let newPostKey = ref.key

    // save jobImage
    if let imageData = jobImage.jpegData(compressionQuality: 0.5) {
        let storage = Storage.storage().reference().child("jobImages/\(newPostKey)")

        storage.putData(imageData).observe(.success, handler: { (snapshot) in
            self.downloadURL = snapshot.metadata?.downloadURL()?.absoluteString
            let postDictionary = [
                "imageDownloadURL" : self.downloadURL!,
                "imageUserDownloadURL" : self.userDownloadURL!,
                "text" : self.text,
                "addedByUser" : self.addedByUser!
                ] as [String : Any]
            self.ref.setValue(postDictionary)
        })
    }
}

我尝试了以下代码

if let imageData = jobImage.jpegData(compressionQuality: 0.5), ((userImage?.jpegData(compressionQuality: 0.5)) != nil) {

但它不起作用,因为数据库中没有保存任何东西......

你有什么想法我可以解决它吗?

【问题讨论】:

  • 您问题中的代码似乎与同时保存两个图像无关。此外,您正在添加一个观察者,它通常会返回一个上传句柄,以便您可以确定其进度、暂停它等。看起来您根本没有使用它。那么,只按照Firebase Guide 中的示例代码上传文件怎么样?你能澄清一下“两个不同的图像”是什么意思吗?
  • 我已经完成了所有这些,但我认为我不应该发布所有代码,因为对我来说只有这些行似乎很重要,但正如你所想,我上传了其他代码 sn-p .
  • 另外,我怎样才能在数据中再放一张图片?
  • 是的 - 您应该只发布复制问题所需的最少代码。您在问题中的内容很好。但是,正如我上面提到的,您问题中的代码与保存两个图像之间没有关联。另外在数据中放一个然后再多的图像是什么意思?什么数据?你想达到什么目的?如果您能澄清问题,我们可能会提供帮助。
  • 好的,所以这可能会得到一个更长的消息,但我对这一切很陌生,为什么我在解释时遇到了一些问题,我希望你能理解这一点。我想要完成的不仅是将用户(在我的情况下名为)jobImage 上传到 Firebase 存储,我还想将 userProfileImage(在我的情况下名为 userImage)上传到存储。现在我将uploadedImageData 声明为imageData,compressionQualtiy 为0.5,以便在此处管理上传到firebase 存储“ storage.putData(imageData).observe(.success, handler: { (snapshot) in "

标签: ios swift firebase firebase-storage


【解决方案1】:

我认为问题是如何将图像上传到两个不同的位置。目前尚不清楚为什么有一个观察功能,所以这个答案忽略了它,因为它可能不需要。

从您的代码开始,您的保存功能将如下所示

func save() {
   self.uploadImageTask(imageName: "my_image.png", toLocation: "jobImage")
   self.uploadImageTask(imageName: "my_image.png", toLocation: "anotherLocation")
}

然后是上传功能

func uploadImageTask(imageName: String, toLocation: String) {
    let theImage = UIImage(named: imageName) //set up your image here
    let data = UIImagePNGRepresentation(theImage)! //we're doing a PNG
    let storage = Storage.storage()
    let storageRef = storage.reference()
    let locationRef = storageRef.child("images").child(toLocation)
    let imageLocationRef = locationRef.child(imageName)

    // Upload the file to the path "images/location/imageName"
    let uploadTask = locationRef.putData(data, metadata: nil) { (metadata, error) in
        guard let metadata = metadata else {
            print("error while uploading")
            return
        }
        let size = metadata.size // Metadata contains file metadata such as size, content-type.
        print(size)
        locationRef.downloadURL { (url, error) in
            guard let downloadURL = url else {
                print("an error occured after uploading and then downloading")
                return
            }
            let x = downloadURL.absoluteString
            print(x) //or build a dict and save to Firebase
        }
    }
}

结果是存储在的图像

/images/jobImage/my_image.png
/images/anotherLocation/my_image.png

它还会打印每个图像的路径,可以存储在 Firebase 中。

【讨论】:

    猜你喜欢
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    相关资源
    最近更新 更多