почему я всегда получаю старое изображение, хотя я успешно загрузил новое изображение на сервер?

Я пытаюсь загрузить изображение на PHP-сервер с помощью alamofire. изображение успешно загружено на сервер на самом деле, но когда я извлекаю данные обратно, используя ту же ссылку/путь к изображению, я всегда получаю обратно старое изображение, а не новое, которое я только что загрузил. старое изображение на самом деле больше не доступно на сервере, но кажется, что оно кэшировано/сохраняется в приложении.

вот код, который я использую для загрузки изображения с помощью alamofire и загрузки изображения обратно

   struct NetworkingService {

static func fetchData(url: URL, completion: @escaping (APIResult<Data>) -> Void) {
        // this function will be used to download image data from the server

        Alamofire.SessionManager.default
            .requestWithoutCache("http://localhost/Twitter/Avatar/53/avatar.jpeg").response { response in
                print("Request: \(response.request!)")
                print("Response: \(response.response!)")
                print("Error: \(response.error!)") <--- i got a fatal error in here
        }

        let request = URLRequest(url:url)
        Alamofire.request(request).responseData { (response) in

            if response.error != nil {
                print(response.error!)
                completion(.failure(response.error!))
            }

            guard let data = response.data else {return}

            completion(.success(data)) <-- the Data will be used to generate UIImage later
        }

    }


    static func uploadAvatar (image: UIImage, endPoint: EndPoint, completion : @escaping (APIResult<Any>) -> Void ) {


        let urlString = "\(endPoint.baseURL)\(endPoint.path)"

        let imgData = UIImageJPEGRepresentation(image, 0.5)!

        let url = try! URLRequest(url: URL(string: urlString)!, method: .post, headers: nil)


        Alamofire.upload(
            multipartFormData: { multipartFormData in
                multipartFormData.append(imgData, withName: "file", fileName: "avatar.jpeg", mimeType: "image/jpeg")

                for (key, value) in endPoint.parameters {
                    multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
                }
        },
            with: url,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.responseJSON { response in
                        if((response.result.value) != nil) {
                            guard let json = response.result.value as? [String:Any] else {return}

                            guard let id = json["id"] as? String,
                                let username = json["username"] as? String,
                                let fullname = json["fullname"] as? String,
                                let email = json["email"] as? String,
                                let avatar = json["avatar"] as? String else {
                                    return
                            }


                            let userData : [String : Any] = [
                                "userID" : id,
                                "username" : username,
                                "email" : email,
                                "avatar" : avatar,
                                "fullname" : fullname
                            ]
                            completion(.success(userData))


                        } else {

                        }
                    }
                case .failure(let encodingError):
                    completion(.failure(encodingError))
                    print(encodingError)
                    break
                }
        }
        )


}


extension Alamofire.SessionManager {
    @discardableResult
    open func requestWithoutCache(
        _ url: URLConvertible,
        method: HTTPMethod = .get,
        parameters: Parameters? = nil,
        encoding: ParameterEncoding = URLEncoding.default,
        headers: HTTPHeaders? = nil)// also you can add URLRequest.CachePolicy here as parameter
        -> DataRequest
    {
        do {
            var urlRequest = try URLRequest(url: url, method: method, headers: headers)
            urlRequest.cachePolicy = .reloadIgnoringCacheData // <<== Cache disabled
            let encodedURLRequest = try encoding.encode(urlRequest, with: parameters)
            return request(encodedURLRequest)
        } catch {
            // TODO: find a better way to handle error
            print(error)
            return request(URLRequest(url: URL(string: "http://example.com/wrong_request")!))
        }
    }
}

Я нашел аналогичный случай с моей проблемой здесь почему я получаю другое изображение при загрузке по тому же пути?

говорят, что я должен удалить все политики кэширования, используя этот код

let session = URLSession(configuration: .ephemeral)

если это проблема, так как мне добиться этого с помощью alamofire? поскольку в приведенном выше решении используется собственная функция сеанса URL-адреса

я пытался реализовать решение в этом, но оно не работает Как отключить кеширование в Alamofire

Заранее спасибо :)


person Alexa289    schedule 31.01.2018    source источник
comment
См. этот ответ stackoverflow.com/a/42529641/7842542   -  person Malik    schedule 31.01.2018
comment
Вы получаете кешированное изображение от Alamofire. Вы можете принудительно загрузить изображение.   -  person    schedule 31.01.2018
comment
@Balanced, не могли бы вы подробнее объяснить «принудительно загрузить изображение»? Я пробовал решение для кеширования alamofire здесь stackoverflow.com/questions/32199494/ но у меня это не работает   -  person Alexa289    schedule 31.01.2018
comment
Можете ли вы отредактировать свой вопрос с кодом, который вы пробовали, расширение в ответе должно работать.   -  person    schedule 31.01.2018
comment
я отредактировал вопрос, я не знаю, почему я получил фатальную ошибку при выполнении печати (Ошибка: (ответ.ошибка!)) ‹--- здесь я получил фатальную ошибку. большое тебе спасибо   -  person Alexa289    schedule 31.01.2018
comment
Я наконец нашел решение, используя эту строку кода при загрузке данных URLCache.shared.removeCachedResponse(for: request) . Спасибо :)   -  person Alexa289    schedule 31.01.2018