Не удается получить правильное сохранение изображения Firebase в каталоге документов в swift 4 iOS - PullRequest
0 голосов
/ 13 марта 2019

Я сохраняю изображение FireBase в каталоге документов! Для уникальности, мой каталог документов называется firebase image name! У меня есть проверка с условием, что если имя каталога firebase не существует в моем каталоге документов, то сохраните это изображение в каталоге документов !!

  • Я проверяю, означает ли это имя firebase, что оно сохраняется в каталоге документов, затем оно получает изображение каталога документов, если нет, то оно получает изображение из Firebase !!

Проблема возникает, когда я пытаюсь получить изображение: - (1) Например: - Firebase Image name - 1.jpg. (2) В каталоге документов сохраните изображение с именем firebase, например 1.jpg (3) Теперь я изменяю FireBase-изображение на другое, но оно сохраняется с именем 1.jpg. (4) когда я пытаюсь получить изображение, потому что уже 1.jpg находится в каталоге документов, поэтому оно не возвращает мне обновленное изображение, оно показывает мне предыдущее изображение 1.jpg !!
как я могу решить эту проблему. Спасибо

Сохранить и получить код изображения: -

 func saveImageDocumentDirectory(imageName: String){
        let documentPath = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
        let imgURL = documentPath.appendingPathComponent(imageName, isDirectory: true)
        if !FileManager.default.fileExists(atPath: imgURL.path){
            do{
            let image = UIImage(named: imgURL.path)
            try image?.pngData()?.write(to: imgURL)
            }catch let err{
                print("error in save:\(err.localizedDescription)")
            }
        }
    }

    func getDocumentImage(imageName: String, firebaseImgURL: URL, imgView:UIImageView){
        let documentPath = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
        let imgURL = documentPath.appendingPathComponent(imageName, isDirectory: true)
        let image = UIImage(contentsOfFile: imgURL.path)
        if image != nil{
            imgView.image = image
        }else{
            imgView.kf.setImage(with: firebaseImgURL)
        }
    }

1 Ответ

0 голосов
/ 13 марта 2019

Пожалуйста, попробуйте как ниже код

 Save Data

 let placeholderURL: URL =
 getDocumentDirectoryPath()!.appendingPathComponent("\(imageName.JPG)/",
 isDirectory: true)
 let fileExists: Bool = FileManager.default.fileExists(atPath: placeholderURL.path )


         if !fileExists {

             let thumbnailImageURL = URL(string: firebaseURL)
             var placeholderData: Data? = nil
             if let url = url {
                 do {

                    placeholderData = try Data(contentsOf: (thumbnailImageURL ?? nil)!)
                 } catch {
                     print("Unable to load data: \(error)")
                 }
             }
             if urlData != nil {
                 do {
                     //saving is done on main thread
                     try placeholderData?.write(to: URL(fileURLWithPath: placeholderURL.path) , options: .atomic)
                 } catch {
                     print(error)
                 }

            }
       }

Получить изображение

    let thumbnailURL: URL = getDocumentDirectoryPath()!.appendingPathComponent("\("imageName.JPG")/", isDirectory: true)

    let fileExists: Bool = FileManager.default.fileExists(atPath: thumbnailURL.path)


    var urlThumbnail:URL? = nil
    if fileExists {

        urlThumbnail = URL(fileURLWithPath: thumbnailURL.path)
    } else {

        urlThumbnail = URL(string: firebaseURL)
    }

Sat изображение в режиме просмотра изображения

self.imgtemp.sd_setImage(with: urlThumbnail, placeholderImage: UIImage(named: "placeholder.png"))
...