Получение изображений из хранилища Firebase

Я пытаюсь получить изображения из хранилища Firebase. Мне нужно получить изображение с точно таким же именем, как у JSON, значение ключа "Product":"some name".

Например, имя изображения внутри url должно быть таким:

let productImageref = productsValue[indexPath.row]["Product"] as? String

Как я могу получить право url? Я этого не понимаю. Я прочитал все документы и, насколько я понимаю, мне нужно использовать «URL-адрес загрузки» из Firebase. Для получения изображения я использую стороннюю библиотеку KingFish, чтобы сделать это асинхронно.

Я пробовал так, но это не дает мне изображения:

let productImageref = productsValue[indexPath.row]["nicotine"] as? String

cell!.imageView!.kf_setImageWithURL(NSURL(string: "https://firebasestorage.googleapis.com/v0/b/snuspedia.appspot.com/o/Catch%20Dry%20Eucalyptus%20White%20Mini.png?alt=media&token=68cf4b76-e35b-4868-80f3-d29872e00122")!, placeholderImage: nil)

Как и в приведенном выше коде, я могу загрузить изображение, но мне нужно загружать разные изображения для каждого cell.

Что я делаю неправильно? Любой совет приветствуется.


person Tarvo Mäesepp    schedule 10.08.2016    source источник


Ответы (2)


Я сделал это почти правильно, но немного неправильно :D

Это код, который работал как шарм:

let productImageref = productsValue[indexPath.row]["Products"] as? String



FIRStorage.storage().reference().child("\(productImageref!).png").downloadURLWithCompletion({(url, error)in
        if error != nil{
            print(error)
        }else{
            (cell?.imageView)!.kf_setImageWithURL(url, placeholderImage: nil)
       }
    })
person Tarvo Mäesepp    schedule 11.08.2016

URL-адрес хранилища GS не является реальным URL-адресом, к которому вы можете получить доступ в любое время. Он может быть доступен только после аутентификации. Поэтому HTTP-вызов GET никогда не сможет получить изображение с URL-адресом GS. По моему опыту, лучше сохранить URL-адрес загруженного изображения следующим образом:

    let reference = storage.referenceForURL(Constant.Firebase.FIREBASE_STORAGE).child(imageNameWithDate())

    if (picture != nil)
    {
        let picData = UIImageJPEGRepresentation(picture!, 0.6)
        reference.putData(picData!, metadata: nil) { (metadata, error) in
            if error == nil {
                let link = metadata?.downloadURL()!.absoluteString
                //save this link for the image URL.
            }
    }
person Harri Westman    schedule 10.08.2016
comment
Это всего лишь простой метод, который я сделал, который возвращает имя изображения в виде строки на основе интервала с 1970 года. - person Harri Westman; 11.08.2016