使用Ktor与KMM上传多图片至服务器遇连接拒绝问题
Ktor + KMM 多文件上传正确实现方式
你当前的代码错误在于将多个文件的字节数组打包成列表一次性append到同一个表单字段,不符合multipart表单的解析规范,这会导致服务器无法正确处理请求,甚至引发连接拒绝。正确的做法是逐个添加每个文件到表单中,每个文件对应一个同名的表单字段(比如attachments[]),同时指定必要的文件头信息。
修正后的代码示例
mainClient.post { url("你的上传接口完整地址") setBody( MultiPartFormDataContent( formData { // 遍历需要上传的图片列表 listOf(kmmFile, kmmFile).forEach { kmmFile -> val fileBytes = toBytes(kmmFile) append( "attachments[]", fileBytes, Headers.build { // 指定文件名,服务器可通过这个获取文件名 append(HttpHeaders.ContentDisposition, "filename=\"${kmmFile.name}\"") // 根据图片实际类型设置Content-Type,比如png用image/png append(HttpHeaders.ContentType, "image/jpeg") } ) } } ) ) }
额外注意事项
- 确认服务器端支持接收
attachments[]形式的多文件字段:多数后端框架(如Spring Boot、PHP Laravel)会自动将同名的多字段解析为文件列表 - 检查
toBytes方法:确保它能正确读取KMM跨平台文件的完整字节数据,没有出现截断或编码错误 - 排查网络问题:如果仍然出现连接拒绝,先确认服务器地址、端口正确,服务器处于运行状态,客户端与服务器之间没有防火墙/代理拦截
内容的提问来源于stack exchange,提问作者abdallah atheer
相关产品推荐
相关产品推荐

