Passer au contenu principal

Envoi d'un fichier au serveur API à l'aide de Spring Boot RestTemplate (MultipartFile, form)

  • Les fichiers peuvent être transmis depuis le client à l'aide du formulaire HTML, mais le serveur SpringBoot peut également transmettre directement des fichiers à un autre serveur.
  • Apprenons comment transférer un fichier à l'aide de RestTemplate.

Code source lié au transfert de fichiers

  • Examinons brièvement uniquement la logique la plus importante.
    • Créer un en-tête. Définissez « Content-Type : multipart/form-data » dans l'en-tête.
    • Lorsque vous envoyez un fichier, vous n'envoyez pas le fichier immédiatement, mais vous devez le changer en ByteArrayResource. Convertissez-le en ByteArrayResource et ajoutez-le au corps.
    • Vous pouvez créer un objet Request pour le transfert de fichiers ou l'envoyer à l'aide d'une carte.
  • Personnellement, je ne savais pas dans quel format envoyer le fichier, mais j'ai appris comment envoyer le fichier en utilisant 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
}