如何使用 RxAlamofire 下载图像

Posted

技术标签:

【中文标题】如何使用 RxAlamofire 下载图像【英文标题】:How to download image using RxAlamofire 【发布时间】:2019-08-18 13:17:26 【问题描述】:
func showImageForUrl(url: String) -> Observable<Async<Any>> 
    let result = RxAlamofire
        .requestJSON(.get,
                     url,
                     parameters: nil)
        .flatMap  (response, json) -> Observable<Any> in
            return Observable.just(json)
        .async()
    return result

网址字符串“http://1.bp.blogspot.com/-KhiJ6WYQn8Q/T7ZXxb_KHxI/AAAAAAAABvM/_l134PCuEcA/s1600/dog+photos+3.jpg”

我正在尝试,但最终结果是一个错误。

【问题讨论】:

【参考方案1】:

我认为问题之一是您请求的格式:下载数据然后将其转换为图像应该是requestData(...) 而不是requestJSON(...)

这是一个比前面的代码简单一点的例子

func showImageForUrl(url: String) -> Observable<UIImage?> 
    return RxAlamofire
        .requestData(.get, url)
        .map( (response,data) -> UIImage? in
            return UIImage(data: data)
        )

你可以如下使用它

showImageForUrl(myUrl)
    .bind(to: myImageView.rx.image)
    .disposed(by: disposeBag)

当无效响应或UIImage 为 nil 等时,您可以进一步过滤。希望对您有所帮助。

【讨论】:

以上是关于如何使用 RxAlamofire 下载图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RxAlamofire 取消先前的请求?

使用 RxAlamofire 限制同时下载

RxAlamofire - 下载完成的事件丢失

如何使用 RxAlamofire 或 Alamofire 5 及更高版本检查相同的 DataRequest 是不是已经在进行中? [关闭]

RxAlamofire - 如何获得错误响应?

RxAlamofire 使用 json 正文进行 post call