【问题标题】:Alamofire and downloading images from server [SOLVED]Alamofire 并从服务器下载图像 [已解决]
【发布时间】:2021-08-22 11:35:14
【问题描述】:

我需要从 URL 下载图像作为数据并将其重新创建到 UIImage(data:)。问题是,Alamofire 在 first 请求时仅下载少量图像数据:

在我对我的 API 进行新调用后,会下载整个图像:

这对我来说真的没有任何意义,为什么会这样。第一个请求总是无法下载所有数据。这是我用来从 URL 下载数据的代码:

func requestWithData(
    _ url: String,
    method: HTTPMethod = .get,
    parameters: Parameters? = nil,
    decoder: JSONDecoder = JSONDecoder(),
    headers: HTTPHeaders? = nil,
    interceptor: RequestInterceptor? = nil
) -> Future<Data, ServerError> {
    return Future({ promise in
        AF.request(
            url,
            method: method,
            parameters: parameters,
            encoding: JSONEncoding.default,
            headers: headers,
            interceptor: interceptor ?? self
        )
        .validate(statusCode: [200, 201, 204, 400, 401])
        .responseData(completionHandler: { (response) in
            switch response.result {
            case .success(let value):
                promise(.success(value))
            case .failure(let error):
                promise(.failure(self.createError(response: response.response, error: error, data: response.data)))
            }
        })
    })
}

func getLocationImage(location: Location) -> Future<Void, ServerError> {
    Future { promise in
        self.networkManager.requestWithData(Endpoint.locationBadge(locationId: location.id, uuid: location.uuid ?? "").url)
            .sink { completion in
                if case .failure(let error) = completion {
                    promise(.failure(error))
                }
            } receiveValue: { [unowned self] imageData in
                self.updateLocationImage(location: location, image: imageData)
                    .sink { completion in
                        if case .failure(let error) = completion {
                            promise(.failure(.init(message: "Error while saving the data", code: .coreData, args: [error.localizedDescription])))
                        }
                    } receiveValue: { _ in
                        promise(.success(()))
                    }
                    .store(in: &subscription)
                
            }
            .store(in: &self.subscription)
    }
}

【问题讨论】:

    标签: swift image alamofire alamofire-request


    【解决方案1】:

    已解决:问题出在 Alamofire 请求上,我可以使用 AlamofireImage framework 解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      相关资源
      最近更新 更多