使用 Spring Boot RestTemplate 发送文件到 api 服务器 (MultipartFile, form)
- 客户端可以使用Html Form传输文件,但SpringBoot服务器也可以直接将文件传输到另一台服务器。
- 让我们学习如何使用 RestTemplate 传输文件。
文件传输相关源码
- 我们只简单看一下最重要的逻辑。
- 创建标题。在标头中设置
Content-Type: multipart/form-data
。 - 发送文件时,并不是立即发送文件,而是需要将其更改为ByteArrayResource。 将其转换为ByteArrayResource,并将其添加到正文中。
- 您可以创建一个Request对象用于文件传输或使用map发送。
- 创建标题。在标头中设置
- 就我个人而言,我不确定以什么格式发送文件,但我学习了如何使用 ByteArrayResource 发送文件。
fun uploadToOtherServer() {
// 1. Create headers
val headers = HttpHeaders()
headers.contentType = MediaType.MULTIPART_FORM_DATA
// 2. File -> ByteArrayResource
val contentsAsResource = object : ByteArrayResource(uploadRequest.file.readBytes()) {
override fun getFilename(): String {
return uploadRequest.file.name
}
}
// 3. Create a MultiValueMap to set the form parameters
// Add other information if you need
val body: MultiValueMap<String, Any> = LinkedMultiValueMap()
body.add("file", contentsAsResource)
body.add("createdAt", uploadRequest.createdAt)
// 4. Send the request
val requestEntity: HttpEntity<MultiValueMap<String, Any>> = HttpEntity(body, headers)
val responseEntity = restTemplate.postForEntity<Any>(
"http://endpoint-url.com/upload", // endpoint url
requestEntity
)
// Add your logic here
}