Firebase上传图片

时间:2017-04-16 04:32:07

标签: swift swift3 firebase-storage

我正在尝试使用以下代码将图片上传到Firebase存储空间:

let storageRef = FIRStorage.storage().reference()
let imageRef = storageRef.child("AAA").child("BBB").child("CCC.jpeg")
let metaData = FIRStorageMetadata()
metaData.contentType = "image/jpeg"
if let uploadData = UIImageJPEGRepresentation(sampleImage, 0.5){
            imageRef.put(uploadData, metadata: metaData, completion: { (metaData, error) in
                print("finished")
                if error != nil{
                    print(error!.localizedDescription)
                }else{
                    print("success")
                }
            })
        }else{
            print("Cannot convert image to JPEG format")
        }

问题是上面的代码没有做任何事情,换句话说,没有打印出来。我已尝试将字符串上传到Firebase数据库,并且成功了。我还检查了Firebase存储的规则:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read: if true;
      allow write: if request.auth != null;
    }
  }
}

那么,我做错了什么?有什么我需要设置的吗?请帮忙!!

2 个答案:

答案 0 :(得分:0)

免责声明:我们只是说我的中间名不是SwiftLint。

试试这个,并确保您的数据库规则也相似。您应该在数据库中获得一个链接,指向存储中的图像。

if let theData = UIImageJPEGRepresentation(sampleImage, 0.5) {
    self.helper(photoData:theData)
}
// ^^ this can happen elsewhere ^^

func upload(photoData:Data) {
    let imgName = Int(round(Date().timeIntervalSince1970)

    let metadata = FIRStorageMetadata()
    metadata.contentType = "image/jpeg"

    let imageRef = FIRStorage.storage().reference().child("AAA/BBB/\(imgName).jpg")

    imageRef.put(photoData, metadata: metadata) { (metadata, error) in
        if let error = error {
            print("Error uploading: \(error)")
            return
        }

        let data:[String:Any] = [
            "timeStamp":"\(Date())",
            "image":metadata!.downloadURL()!.absoluteString
        ]

        let dbRef = FIRDatabase.database().reference()
        dbRef.child("imageUploads").childByAutoId().setValue(data)

    }    
}

答案 1 :(得分:0)

好吧,我的原始解决方案和@MGTLA解决方案都是正确的,问题结果是上传图片后的while循环...这与此主题无关​​。