zoukankan      html  css  js  c++  java
  • ktor下载文件流

    suspend fun main() {
        //腾讯网logo
        val url1 = "https://mat1.gtimg.com/pingjs/ext2020/qqindex2018/dist/img/qq_logo_2x.png"
        //百度logo
        val url2="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"
    
        HttpClient(CIO).use { httpClient ->
            //用第一种方式下载图片
            httpClient.download(url1, File("./1.jpg").outputStream())
    
            //用第二种方式下载图片
            val httpStatement: HttpStatement = httpClient.get(url2)
            val fileOutputStream=File("./2.jpg").outputStream()
            download(httpStatement, fileOutputStream)
        }
    }
    
    //传入url字符串进行下载
    suspend fun HttpClient.download(url: String, fileOutputStream: FileOutputStream) = withContext(Dispatchers.IO) {
        this@download.get<HttpStatement>(url).execute { httpResponse ->
            val channel: ByteReadChannel = httpResponse.receive()
            while (!channel.isClosedForRead) {
                val packet = channel.readRemaining(DEFAULT_BUFFER_SIZE.toLong())
                fileOutputStream.writePacket(packet)
            }
        }
    }
    
    //利用ktor client下载文件 能够实现高度自定义的HttpStatement
    suspend fun download(httpStatement: HttpStatement, fileOutputStream: FileOutputStream) = withContext(Dispatchers.IO) {
        httpStatement.execute { httpResponse ->
            val channel: ByteReadChannel = httpResponse.receive()
            while (!channel.isClosedForRead) {
                val packet = channel.readRemaining(DEFAULT_BUFFER_SIZE.toLong())
                fileOutputStream.writePacket(packet)
            }
        }
    }
    
    
  • 相关阅读:
    mysql递归层次查询
    mybatis+spring事务
    浅谈数据库表的分割技术(水平、垂直、库表散列)(引用)
    高并发的常见思维
    jee websocket搭建总结
    hibernate 多表查询
    jsp作为服务端,ajax请求回应
    排序(2)--希尔,快速,归并
    排序(1)--冒泡,插入,选择
    Java反射基础
  • 原文地址:https://www.cnblogs.com/soclear/p/15167898.html
Copyright © 2011-2022 走看看