我正在尝试使用以下代码将图像上传到 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;
}
}
}
那么,我做错了什么?有什么我需要设置的吗?请帮忙!!
最佳答案
免责声明:假设我的中间名不是 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)
}
}
关于swift - Firebase 上传图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43433726/