我正在尝试使用以下代码将图片上传到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;
}
}
}
那么,我做错了什么?有什么我需要设置的吗?请帮忙!!
答案 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循环...这与此主题无关。