简体   繁体   English

如何检索存储在Firebase中的图像以在视图图像视图中显示

[英]how to Retrieve image stored in firebase to show it in view image view

i am facing a problem with how to retrieve an image stored in firebase here is the code i used to store the image : 我在如何检索存储在Firebase中的图像时遇到问题,这是我用来存储图像的代码:

@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 我只是想从Firebase存储中将图像加载到用户配置文件中,以便每次用户登录其配置文件时,他都能看到他上传到应用程序的所有图像

We highly recommend using Firebase Storage and the Firebase Realtime Database together to accomplish this. 我们强烈建议同时使用Firebase存储和Firebase实时数据库来完成此任务。 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. 有关更多信息,请参见“ 零应用程序:使用Firebase开发”及其相关的源代码 ,以获取有关如何执行此操作的实际示例。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM