Zum Hauptinhalt springen

Senden einer Datei an den API-Server mithilfe von Spring Boot RestTemplate (MultipartFile, Formular)

  • Dateien können vom Client mithilfe des HTML-Formulars übertragen werden, der SpringBoot-Server kann Dateien jedoch auch direkt an einen anderen Server übertragen.
  • Erfahren Sie, wie Sie eine Datei mit RestTemplate übertragen.

Quellcode im Zusammenhang mit der Dateiübertragung

  • Schauen wir uns kurz nur die wichtigste Logik an.
    • Kopfzeile erstellen. Legen Sie „Content-Type: multipart/form-data“ im Header fest.
    • Wenn Sie eine Datei senden, senden Sie die Datei nicht sofort, sondern müssen sie in ByteArrayResource ändern. Konvertieren Sie sie in ByteArrayResource und fügen Sie sie dem Textkörper hinzu.
    • Sie können ein Anforderungsobjekt für die Dateiübertragung erstellen oder es mithilfe einer Karte senden.
  • Persönlich war ich nicht sicher, in welchem ​​Format ich die Datei senden sollte, aber ich habe gelernt, wie man die Datei mit ByteArrayResource sendet.
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
}