使用 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)
}
}
}
我想从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)
}
}
}