Saltar al contenido principal

Enviar un archivo al servidor api usando Spring Boot RestTemplate (MultipartFile, formulario)

  • Los archivos se pueden transmitir desde el cliente mediante el formulario HTML, pero el servidor SpringBoot también puede transmitir archivos directamente a otro servidor.
  • Aprendamos cómo transferir un archivo usando RestTemplate.

Código fuente relacionado con la transferencia de archivos

  • Veamos brevemente sólo la lógica más importante.
    • Crear encabezado. Establezca Tipo de contenido: multiparte/datos de formulario en el encabezado.
    • Al enviar un archivo, no lo envía de inmediato, sino que debe cambiarlo a ByteArrayResource. Conviértalo a ByteArrayResource y agréguelo al cuerpo.
    • Puede crear un objeto Solicitud para la transferencia de archivos o enviarlo usando el mapa.
  • Personalmente, no estaba seguro de en qué formato enviar el archivo, pero aprendí cómo enviar el archivo usando 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
}