使用 Alamofire 5 下载多个 URL

Download multiple URLs using Alamofire 5

我想从URL数组中下载文件,并将结果存储在另一个数组中。

例如

let urls = [URL1,URL2,URL3,....]
for url in urls {
    AF.download(url, method: .get, parameters: nil, encoding: URLEncoding.default, headers:
    headers, interceptor: nil, to: destination).response { (responseData) in

        self.urlLoad.append(responseData.fileURL!)
        completion(self.urlLoad)

    }

}

我现在遇到的问题是下载并得到相同的结果。我不知道该怎么办。请指导我

您还没有分享您的 destination,但问题是闭包是如何定义的以及您如何构建返回的 URL。但是你想给它一个 DownloadRequest.Destination 闭包,returns 每个 URL 都有一个唯一的路径。例如,您可以告诉它把下载内容放在“缓存”文件夹中,如下所示:

let urls = [
    "https://spaceflight.nasa.gov/gallery/images/apollo/apollo17/hires/s72-55482.jpg",
    "https://spaceflight.nasa.gov/gallery/images/apollo/apollo10/hires/as10-34-5162.jpg",
    "https://spaceflight.nasa.gov/gallery/images/apollo-soyuz/apollo-soyuz/hires/s75-33375.jpg",
    "https://spaceflight.nasa.gov/gallery/images/apollo/apollo17/hires/as17-134-20380.jpg",
    "https://spaceflight.nasa.gov/gallery/images/apollo/apollo17/hires/as17-140-21497.jpg",
    "https://spaceflight.nasa.gov/gallery/images/apollo/apollo17/hires/as17-148-22727.jpg"
].compactMap { URL(string: [=10=]) }

let folder = try! FileManager.default
    .url(for: .cachesDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
    .appendingPathComponent("images")

for url in urls {
    let destination: DownloadRequest.Destination = { _, _ in
        let fileURL = folder.appendingPathComponent(url.lastPathComponent)
        return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
    }

    AF.download(url, to: destination).response { responseData in
        switch responseData.result {
        case .success(let url):
            guard let url = url else { return }
            self.urlLoad.append(url)

        case .failure(let error):
            print(error)
        }
    }
}

或者,或者:

for url in urls {
    AF.download(url) { _, _ in
        (folder.appendingPathComponent(url.lastPathComponent), [.removePreviousFile, .createIntermediateDirectories])
    }.response { responseData in
        switch responseData.result {
        case .success(let url):
            guard let url = url else { return }
            self.urlLoad.append(url)

        case .failure(let error):
            print(error)
        }
    }
}