更新时间:2023-01-06 20:01:39
我们高度推荐最终使用Firebase存储和Firebase实时数据库来完成此操作。以下是一个完整的示例:
共享:
// Firebase服务
var database:FIRDatabase!
var storage:FIRStorage!
...
//初始化数据库,Auth,存储
database = FIRDatabase.database()
storage = FIRStorage.storage()
...
//为你的图片初始化一个数组
var picArray:[UIImage]()
let myUserId = ... //从Firebase Auth或其他一些ID提供者获取
上传:
let fileData = NSData()//获取数据...
let storageRef = storage.reference()。child(userFiles / \(myUserId)/ myFile)
storageRef.putData(fileData)。 observeStatus(.Success){(snapshot)in
//当图片成功上传时,我们得到它的下载URL
让downloadURL = snapshot.metadata?.downloadURL()?。absoluteString
//将下载URL写入实时数据库
let dbRef = database.reference()。child(userFiles / \(myUserId)/ myFile)
dbRef.setValue(downloadURL)
下载:
let dbRef = database.reference() .child(userFiles / \(myUserId))
dbRef.observeEventType(.ChildAdded,withBlock:{(snapshot)in
//从快照获取下载网址
让downloadURL =快照.value()as! String
//从URL创建存储引用
let storageRef = storage.referenceFromURL(downloadURL)
//下载数据,假设最大大小为1MB(可以根据需要更改)
storageRef.dataWithMaxSize(1 * 1024 * 1024){(data,error) - > void
//创建一个UIImage,将它添加到数组
let pic = UIImage(data:data)
picArray.append(pic)
})
})
有关详情,请参阅零到应用程序:使用Firebase开发,它是相关的源代码,一个实际的例子如何做到这一点。
i am facing a problem with how to retrieve an image stored in firebase
here is the code i used to store the image :
@IBAction func AddDeviceButton(sender: AnyObject) {
if DeviceName.text == "" || Description.text == "" || ImageView.image == nil {
let alert = UIAlertController(title: "عذرًا", message:"يجب عليك تعبئة معلومات الجهاز كاملة", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "نعم", style: .Default) { _ in })
self.presentViewController(alert, animated: true){}
} else {
let imageName = NSUUID().UUIDString
let storageRef = FIRStorage.storage().reference().child("Devices_Images").child("\(imageName).png")
let metaData = FIRStorageMetadata()
metaData.contentType = "image/png"
if let uploadData = UIImagePNGRepresentation(self.ImageView.image!) {
storageRef.putData(uploadData, metadata: metaData, completion: { (data, error) in
if error != nil {
print(error)
} else {
print("Image Uploaded Succesfully")
let profileImageUrl = data?.downloadURL()?.absoluteString
//
let DeviceInfo = [
"ImageUrl":profileImageUrl!,
"DeviceName":self.DeviceName.text!,
"Description":self.Description.text!,
"Category":self.itemSelected
]
let DeviceInformation = [
"ImageUrl":profileImageUrl!,
"DeviceName":self.DeviceName.text!,
"Description":self.Description.text!,
"Category":self.itemSelected,
"name": self.globalUserName,
"email":self.globalEmail ,
"city": self.globalCity,
"phone": self.globalPhone
]
self.ref.child("Devices").child(FIRAuth.auth()!.currentUser!.uid).observeSingleEventOfType(.Value, withBlock: {(snapShot) in
if snapShot.exists(){
let numberOfDevicesAlreadyInTheDB = snapShot.childrenCount
if numberOfDevicesAlreadyInTheDB < 3{
let newDevice = String("Device\(numberOfDevicesAlreadyInTheDB+1)")
let userDeviceRef = self.ref.child("Devices").child(FIRAuth.auth()!.currentUser!.uid)
userDeviceRef.observeSingleEventOfType(.Value, withBlock: {(userDevices) in
if let userDeviceDict = userDevices.value as? NSMutableDictionary{
userDeviceDict.setObject(DeviceInfo,forKey: newDevice)
userDeviceRef.setValue(userDeviceDict)
}
})
}
else{
let alert = UIAlertController(title: "عذرًا", message:"يمكنك إضافة ثلاثة أجهزة فقط كحد أقصى", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "نعم", style: .Default) { _ in })
self.presentViewController(alert, animated: true){}
}
}else{
self.ref.child("Devices").child(FIRAuth.auth()!.currentUser!.uid).setValue(["Device1" : DeviceInfo])
self.ref.child("UserDevices").childByAutoId().setValue(DeviceInformation)
}
})
//
} })
}
} //Big Big Else
} //AddDeviceButton
i just wanna load the images to user profile from the firebase storage so that every time user logged into his profile he can see all images he uploads to the application
We highly recommend using Firebase Storage and the Firebase Realtime Database together to accomplish this. Here's a full example:
Shared:
// Firebase services
var database: FIRDatabase!
var storage: FIRStorage!
...
// Initialize Database, Auth, Storage
database = FIRDatabase.database()
storage = FIRStorage.storage()
...
// Initialize an array for your pictures
var picArray: [UIImage]()
let myUserId = ... // get this from Firebase Auth or some other ID provider
Upload:
let fileData = NSData() // get data...
let storageRef = storage.reference().child("userFiles/\(myUserId)/myFile")
storageRef.putData(fileData).observeStatus(.Success) { (snapshot) in
// When the image has successfully uploaded, we get it's download URL
let downloadURL = snapshot.metadata?.downloadURL()?.absoluteString
// Write the download URL to the Realtime Database
let dbRef = database.reference().child("userFiles/\(myUserId)/myFile")
dbRef.setValue(downloadURL)
}
Download:
let dbRef = database.reference().child("userFiles/\(myUserId)")
dbRef.observeEventType(.ChildAdded, withBlock: { (snapshot) in
// Get download URL from snapshot
let downloadURL = snapshot.value() as! String
// Create a storage reference from the URL
let storageRef = storage.referenceFromURL(downloadURL)
// Download the data, assuming a max size of 1MB (you can change this as necessary)
storageRef.dataWithMaxSize(1 * 1024 * 1024) { (data, error) -> Void in
// Create a UIImage, add it to the array
let pic = UIImage(data: data)
picArray.append(pic)
})
})
For more information, see Zero to App: Develop with Firebase, and it's associated source code, for a practical example of how to do this.