我正在使用Firebase for iOS 在我的应用中,用户必须将照片与其个人资料相关联 在MySQL上有BLOB类型来保存数据库中的图像 但是在Firebase上我找不到这样的东西
答案 0 :(得分:1)
您必须使用Firebase Storage
上传图片,然后获取网址并将网址保存在数据库中的某个位置。
以下是有关如何上传文件的文档:https://firebase.google.com/docs/storage/ios/upload-files
以下是我的一个项目的例子
FIRStorageReference *ref = [[[FIRStorage storage] reference] child:[NSString stringWithFormat:@"images/users/profilesPictures/pp%@.jpg", [UsersDatabase currentUserID]]];
[ref putData:imageData metadata:nil completion:^(FIRStorageMetadata * _Nullable metadata, NSError * _Nullable error) {
if (error) {
[[self viewController] hideFullscreenLoading];
[[self viewController] showError:error];
} else {
[ref downloadURLWithCompletion:^(NSURL * _Nullable URL, NSError * _Nullable error) {
if (error) {
[[self viewController] hideFullscreenLoading];
[[self viewController] showError:error];
} else {
[[self viewController] hideFullscreenLoading];
[self.profilePictureButton setImage:nil forState:UIControlStateNormal];
[[UsersDatabase sharedInstance].currentUser setProfilePictureURL:[URL absoluteString]];
[UsersDatabase saveCurrentUser]; // This also updates the user's data in the realtime database.
}
}];
}
}];
答案 1 :(得分:1)
guard let uid = Auth.auth().currentUser?.uid else {return}
guard let imageData = UIImageJPEGRepresentation(profilePic, 0.5) else {return}
let profileImgReference = Storage.storage().reference().child("profile_image_urls").child("\(uid).png")
let uploadTask = profileImgReference.putData(imageData, metadata: nil) { (metadata, error) in
if let error = error {
print(error.localizedDescription)
} else {
let downloadURL = metadata?.downloadURL()?.absoluteString ?? ""
// Here you get the download url of the profile picture.
}
}
uploadTask.observe(.progress, handler: { (snapshot) in
print(snapshot.progress?.fractionCompleted ?? "")
// Here you can get the progress of the upload process.
})
第1步:使用UIImageJPEGRepresentation(UIImage, compressionQuality)
或UIImagePNGRepresentation(UIImage)
第2步:创建存储引用。在上面的示例中,我使用Storage.storage().reference()
获取当前Firebase应用的存储引用,然后使用.child("FolderName")
第3步:使用Firebase存储的.putData
功能将图像数据上传到Firebase存储。您可以捕获任务引用(即uploadTask)以观察上载的进度。
//注意:我使用Firebase用户ID作为图片名称,因为每个用户ID对于firebase Auth都是唯一的,并且在配置文件图片替换或意外删除时没有不匹配。
答案 2 :(得分:1)
幸运的是,这是一项非常简单的任务。
Firebase用户对象具有photoUrl属性,可以像这样读取
let user = Auth.auth().currentUser
if let user = user {
let uid = user.uid
let email = user.email
let photoURL = user.photoURL
// ...
}
网址可以是Firebase外部的网址,也可以保存在Firebase storage
中更改photoUrl:
let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
changeRequest?.displayName = //if you want to change the displayName
changeRequest?.photoURL = //some Url
changeRequest?.commitChanges { (error) in
// ...
}