【问题标题】:ImageView to Firebase Storage in SwiftImageView 到 Swift 中的 Firebase 存储
【发布时间】:2019-01-03 17:35:42
【问题描述】:

我正在尝试将图像从 ImageView 上传到 Firebase 存储,但它不起作用。

我在下面列出了我的代码:我的图像视图称为 ProfileImage

        let storageRef = Storage.storage().reference().child("myImage.png")
        if let uploadData = self.ProfileImage.image!.pngData() {
            storageRef.putFile(from: uploadData, metadata: nil) { (metadata, error) in
                if error != nil {
                    print("error")
                    completion(nil)
                } else {
                    // your uploaded photo url.
                }
            }
        }

它出现错误“无法将'Data'类型的值转换为预期的参数类型'URL'

【问题讨论】:

    标签: ios swift firebase firebase-storage


    【解决方案1】:

    您正在尝试上传数据,而不是文件。替换

    putFile
    

    putData
    

    它应该可以正常工作

    【讨论】:

      【解决方案2】:

      试试这个代码:-

      let storageRef = Storage.storage().reference().child("myImage.png")
          if let uploadData = UIImagePNGRepresentation(self.profileImage.image!) {
              storageRef.put(uploadData, metadata: nil) { (metadata, error) in
                  if error != nil {
                      print("\(error.localizeDescription)")
                  } else {                    
                      // your uploaded photo url.
                  }
             }
      

      【讨论】:

        【解决方案3】:
        let refDatabase = Database.database().reference()
        var refstorage = Storage.storage().reference()
        let data = image.jpegData(compressionQuality: 1.0) // 
        let metadata = StorageMetadata()
        metadata.contentType = "image/jpeg"
        let postkey = refDatabase.child("Post").childByAutoId().key
        print(postkey)
        let imagename = "PostImage/\(postkey).png"
        refstorage = refstorage.child(imagename)
        let timestamp = Date().timeIntervalSince1970 // you can use this to track time when it was uploaded. 
        self.refstorage?.putData(data!, metadata: metadata, completion: { (meta, error) in
        
            if error == nil{
                if let imageData = meta?.downloadURL()?.absoluteString{
                    // DO SOMETHING
                } else {
                    print("Couldn't get the URL for image")
                }
            }
        })
        

        【讨论】:

        • UIImagePNGRepresentation 已弃用。时间戳在那里有什么用途?顺便说一句,您在上传和下载图像时应避免使用 png 图像类型。使用质量为 1.0 的 jpeg
        【解决方案4】:

        我知道这个问题已经得到解答,但是有一种更简单的方法可以做到这一点。除了导入 Firebase 和 Firebase Storage,您还必须将 FirebaseUI 添加到您的 podfile 并导入它。

        完成此操作后,您可以更简单地将图像添加到您的应用中。

        let storage = Storage.storage()
        let storageRef = storage.reference()
        let placeholderImage = UIImage(named: "placeholder.jpeg")
        let reference = storageRef.child("myImage.png")
        ProfileImage.sd_setImage(with: reference, placeholderImage: placholderImage)
        

        (占位符图片只是您放入 XCode 中资产文件夹的透明图片,您可以在应用程序中重复使用多次,以便在您的应用程序上获取 Firebase 图片时使用。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-20
          相关资源
          最近更新 更多