Uploade MultipartFile med Spring RestTemplate

1. Oversigt

Denne hurtige vejledning fokuserer på, hvordan man uploader en flerdelt fil ved hjælp af Spring's RestTemplate.

Vi ser begge dele en enkelt fil og flere filer - uploadved hjælp af RestTemplate.

2. Hvad er en HTTP Multipart Request?

Kort sagt, et grundlæggende HTTP POST-anmodningsorgan indeholder formulardata i navn / værdipar.

På den anden side kan HTTP-klienter konstruere HTTP multipart-anmodninger om at sende tekst eller binære filer til serveren; det bruges hovedsageligt til upload af filer.

En anden almindelig brugssag er at sende e-mailen med en vedhæftet fil. Multipart-filanmodninger opdeler en stor fil i mindre stykker og bruger grænsemarkører til at angive starten og slutningen af ​​blokken.

Udforsk mere om anmodninger om flere dele her.

3. Maven-afhængighed

Denne enkelte afhængighed er nok til klientapplikationen:

 org.springframework spring-web 5.2.2.RELEASE 

4. Den File Upload Server

Filserver-API'en udsætter to REST-slutpunkter til henholdsvis upload af enkelt- og flere filer:

  • POST / filserver / enkeltfilupload /
  • POST / filserver / multiplefileupload /

5. Uploade en enkelt fil

Lad os først se upload af enkelt fil ved hjælp af RestTemplate.

Vi er nødt til at skabe HttpEntitymed overskrift og krop. Indstil indholdstype headerværdi til MediaType.MULTIPART_FORM_DATA. Når denne overskrift er indstillet, RestTemplate automatisk marcherer fildataene sammen med nogle metadata.

Metadata inkluderer filnavn, filstørrelse og filindholdstype (f.eks tekst / almindelig):

HttpHeaders headers = nye HttpHeaders (); headers.setContentType (MediaType.MULTIPART_FORM_DATA);

Derefter skal du oprette anmodningsorganet som en forekomst af LinkedMultiValueMap klasse. LinkedMultiValueMap indpakker LinkedHashMap lagring af flere værdier for hver tast i a LinkedList.

I vores eksempel er getTestFile () metoden genererer en dummy-fil med det samme og returnerer en FileSystemResource:

MultiValueMap-krop = nyt LinkedMultiValueMap (); body.add ("fil", getTestFile ());

Endelig konstruer en HttpEntity forekomst, der omslutter overskriften og kropsobjektet og sender det ved hjælp af en RestTemplate.

Bemærk, at upload af en enkelt fil peger på / fileserver / singlefileupload / slutpunkt.

I sidste ende opkaldet restTemplate.postForEntity () fuldfører jobbet med at oprette forbindelse til den givne URL og sende filen til serveren:

HttpEntity requestEntity = ny HttpEntity (body, headers); String serverUrl = "// localhost: 8082 / spring-rest / fileserver / singlefileupload /"; RestTemplate restTemplate = ny RestTemplate (); ResponseEntity response = restTemplate .postForEntity (serverUrl, requestEntity, String.class);

6. Uploade flere filer

Ved upload af flere filer er den eneste ændring fra upload af enkelt fil i konstruktionen af ​​anmodningen.

Lad os oprette flere filer og tilføj dem med den samme nøgle i MultiValueMap.

Naturligvis skal anmodnings-URL'en henvise til slutpunktet for upload af flere filer:

MultiValueMap-krop = nyt LinkedMultiValueMap (); body.add ("filer", getTestFile ()); body.add ("filer", getTestFile ()); body.add ("filer", getTestFile ()); HttpEntity requestEntity = ny HttpEntity (body, headers); String serverUrl = "// localhost: 8082 / spring-rest / fileserver / multiplefileupload /"; RestTemplate restTemplate = ny RestTemplate (); ResponseEntity response = restTemplate .postForEntity (serverUrl, requestEntity, String.class);

Det er altid muligt model upload af en enkelt fil ved hjælp af upload af flere filer.

7. Konklusion

Afslutningsvis så vi et tilfælde af MultipartFile overførsel ved hjælp af foråret RestTemplate.

Som altid er eksempelklienten og serverens kildekode tilgængelig på GitHub.