的步骤如下:
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
}
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient
import okhttp3.Request
import java.io.File
suspend fun downloadFiles(urls: List<String>, destinationDir: String) = withContext(Dispatchers.IO) {
val client = OkHttpClient()
val requests = urls.map { url ->
val request = Request.Builder()
.url(url)
.build()
client.newCall(request)
}
val responses = requests.map { request ->
async {
client.newCall(request).execute()
}
}.awaitAll()
responses.forEachIndexed { index, response ->
val file = File(destinationDir, "file_$index")
response.body?.byteStream()?.use { inputStream ->
file.outputStream().use { outputStream ->
inputStream.copyTo(outputStream)
}
}
}
}
val urls = listOf(
"https://example.com/file1.txt",
"https://example.com/file2.txt",
"https://example.com/file3.txt"
)
val destinationDir = "/path/to/destination/dir"
GlobalScope.launch {
try {
downloadFiles(urls, destinationDir)
// 下载完成后的处理逻辑
} catch (e: Exception) {
// 错误处理逻辑
}
}
在上述代码中,你需要将urls
替换为你要下载的文件的URL列表,将destinationDir
替换为你想要保存文件的目标文件夹路径。
这样,你就可以使用OkHttp和协程来下载多个文件了。OkHttp是一个强大的HTTP客户端库,而协程可以简化异步操作的处理,使代码更加简洁和易读。
推荐的腾讯云相关产品:腾讯云对象存储(COS)可以用于存储下载的文件。你可以通过以下链接了解更多关于腾讯云对象存储的信息:腾讯云对象存储(COS)。
领取专属 10元无门槛券
手把手带您无忧上云