Функция загрузки фотографий из интернета не работает - PullRequest
0 голосов
/ 07 июня 2018

У меня есть этот код:

struct MyPackageData: Codable {
    let versionDate: String
    let photosSizes, packshotsSizes, inspirationsPhotoSizes, conceptsSlidesSizes: [String: Int]
    let tipsSlidesSizes, leafletsSlidesSizes, leafletsPdfSlidesSizes: [String: Int]
}
func downloadImagesTipsSlides(toDownloads: MyPackageData, savedURL: String){
        do {
            let dateToParse = toDownloads.tipsSlidesSizes
            for photo in dateToParse {
                let fileNamePhoto = photo.key
                let checkLocalCopyFileIsAvailable = checkLocalFileCopyIsAvailable(fileName: (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "/" + FileFolders.GET_TIPS_SLIDES.rawValue + "/" + "\(fileNamePhoto)")
                if checkLocalCopyFileIsAvailable == false {
                    let productImageUrl : URL = URL(string:  "\(ApiConstans.fullPath)?action=\(FileFolders.GET_TIPS_SLIDES.rawValue)&name=\(fileNamePhoto)&resolution=FHD&lang=" + (AppGlobalManager.sharedManager.loggedUser?.getUserLanguageUrl())!)!
                    remoteResource(at: productImageUrl, fileSize: photo.value) { (isImage) in
                        if isImage == false {
                        }
                        if isImage == true {
                            self.saveDownloadImages(fileInternetUrl: productImageUrl, fileName: "\(fileNamePhoto)", savedURL: savedURL)
                        }
                    }
                } else {
                    print("I have photo \(fileNamePhoto) - nie robię nic")
                }
            }
        }
    }


func remoteResource(at url: URL, fileSize: Int, isImage: @escaping ((Bool) -> Void)) {
    let request = URLRequest(url: url)
    debugPrint(request)
    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if let data = data, let image = UIImage(data: data) {
            if let _ = UIImageJPEGRepresentation(image, 1.0) {
                isImage(true)
            } else if let _ = UIImagePNGRepresentation(image) {
                isImage(true)
            } else {
                isImage(false)
            }

        } else {
            isImage(false)
        }
        isImage(true) // remove
    }
    task.resume()
}


func saveDownloadImages(fileInternetUrl: URL, fileName: String, savedURL: String){
        let documentsDir = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!
        let fullImagesPath = documentsDir.appendingPathComponent(savedURL)
        let cms = ServerConnect()
        print("XX \(fullImagesPath)")
        cms.downloadedFileFromInternet(fileInternetUrl: fileInternetUrl, saveToPath: fullImagesPath, fileName: fileName,  completion: { (data) in
            switch data {
            case .succes:
                print("")
            case .error(let error):
                //self.errorLoginMessage(txt: "MainView - Error 110: Problem with download images. \(error)", title: "Blad".localized())
                print("")
                break
            }
        })
    }

Когда я выдаю ошибку: Поток 7: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения

в строке:

let productImageUrl : URL = URL(string:  "\(ApiConstans.fullPath)?action=\(FileFolders.GET_TIPS_SLIDES.rawValue)&name=\(fileNamePhoto)&resolution=FHD&lang=" + (AppGlobalManager.sharedManager.loggedUser?.getUserLanguageUrl())!)!

Моя консоль отладки:

debug

У меня проблема с файлом с именем: - wolność ogłoszenia.jpg - Wydajność wagowa ___ 004.jpg

и т. Д.

С именем файла с обычным именем: 1.jpg, 139485.jpg, 14383.jpg - этот код работает правильно.

Приведенный выше код предназначен для загрузки фотографий из Интернета и сохранения их в памяти устройства.,Файлы без специальных имен работают правильно.

Не могу изменить имя файла на сервере.

Кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 07 июня 2018

Не заставляйте распаковывать вещи, вы сохраните так много распространенных сбоев.

let productImageUrl : URL = URL(string:  "\(ApiConstans.fullPath)?action=\(FileFolders.GET_TIPS_SLIDES.rawValue)&name=\(fileNamePhoto)&resolution=FHD&lang=" + (AppGlobalManager.sharedManager.loggedUser?.getUserLanguageUrl())!)!

Это String не URL.Разверните, используя guard let/ if let:

guard let languageUrl = AppGlobalManager.sharedManager.loggedUser?.getUserLanguageUrl(), let urlString = "\(ApiConstans.fullPath)?action=\(FileFolders.GET_TIPS_SLIDES.rawValue)&name=\(fileNamePhoto)&resolution=FHD&lang=\(languageUrl)".addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed), let productImageUrl = URL(string:  urlString) else {
    print("Problem in converting string to URL")
    return
}
print(productImageUrl)

Проще говоря, у вашего String должно быть "http://" or "https://" в начале, чтобы преобразовать это String в URL.Для чего-то в каталоге документов вы добавляете "file://".

...