如何使用Ktor客户端上传文件 [英] How to upload a file using Ktor client

查看:158
本文介绍了如何使用Ktor客户端上传文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已阅读文档有关HTTP请求的信息Ktor客户端,但是缺少文件上传的示例.它提到了PartData.FileItem,但不清楚如何使用它.

I have read the docs about HTTP requests in Ktor clients, but it lacks of an example of file upload. It mentions PartData.FileItem, but it's unclear how to use it.

那么,如何准备multipart/form-data请求在Ktor中上传文件?

So, how do I prepare a multipart/form-data request for file upload in Ktor?

推荐答案

您应使用 创建此类列表.

You should use submitFormWithBinaryData's formData parameter to provide a list of parts. There is a helper function with the same name to create such list.

HttpClient(Apache).use { client ->
    val parts: List<PartData> = formData {
        // Regular form parameter
        append("text", "Hello, world")

        // File upload. Param name is "file-1" and file's name is "file.csv"
        append("file-1", "file.csv", ContentType.Text.CSV) {
            this.append("1,2,3")
        }

        // Verbose DSL
        val headersBuilder = HeadersBuilder()
        headersBuilder[HttpHeaders.ContentType] = "application/java-archive"
        headersBuilder[HttpHeaders.ContentDisposition] = "filename=wrapper.jar"
        this.append(
                "file-2",
                InputProvider { File("gradle/wrapper/gradle-wrapper.jar").inputStream().asInput() },
                headersBuilder.build()
        )
    }

    client.submitFormWithBinaryData<Unit>(formData = parts /* prepared parts */) {
        url("https://hookb.in/XXX")

        // Query string parameters
        parameter("param-1", "value-1")
        parameter("param-2", "value-2-1")
        parameter("param-2", "value-2-2")

        // Headers
        headers {
            this["X-My-Header-1"] = "X-My-Header-1-Value"
            appendAll("X-My-Header-2", listOf("X-My-Header-2-Value-1", "X-My-Header-2-Value-2"))
        }
    }
}

这篇关于如何使用Ktor客户端上传文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆