Laste opp MultipartFile med Spring RestTemplate

1. Oversikt

Denne raske opplæringen fokuserer på hvordan du laster opp en flerdelt fil ved hjelp av Spring's RestTemplate.

Vi får se begge deler en enkelt fil og flere filer - last oppved hjelp av RestTemplate.

2. Hva er en HTTP-forespørsel om flere deler?

Enkelt sagt, en grunnleggende HTTP POST-forespørsel inneholder skjema data i navn / verdipar.

På den annen side kan HTTP-klienter konstruere HTTP multipart-forespørsler om å sende tekst eller binære filer til serveren; den brukes hovedsakelig til å laste opp filer.

En annen vanlig brukssak er å sende e-posten med et vedlegg. Multipart filforespørsler bryter en stor fil i mindre biter og bruker grensemarkører for å indikere starten og slutten av blokken.

Utforsk mer om forespørsler om flere deler her.

3. Maven avhengighet

Denne avhengigheten er nok for klientapplikasjonen:

 org.springframework spring-web 5.2.2.RELEASE 

4. Den Server for filopplasting

Filserver-API-en avslører to REST-sluttpunkter for å laste opp henholdsvis enkelt- og flere filer:

  • POST / filserver / enkeltfilopplasting /
  • POST / filserver / flerfilopplasting /

5. Laste opp en enkelt fil

La oss først se enkelt filopplasting ved hjelp av RestTemplate.

Vi må skape HttpEntitymed topptekst og kropp. Sett innholdstype topptekstverdi til MediaType.MULTIPART_FORM_DATA. Når denne overskriften er satt, RestTemplate marsjerer automatisk fildataene sammen med noen metadata.

Metadata inkluderer filnavn, filstørrelse og filinnholdstype (for eksempel tekst / vanlig):

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

Deretter bygger du forespørselslegemet som en forekomst av LinkedMultiValueMap klasse. LinkedMultiValueMap innpakker LinkedHashMap lagring av flere verdier for hver tast i a LinkedList.

I vårt eksempel, den getTestFile () metoden genererer en dummy-fil på farten og returnerer en FileSystemResource:

MultiValueMap body = new LinkedMultiValueMap (); body.add ("fil", getTestFile ());

Til slutt, konstruer en HttpEntity forekomst som bryter overskriften og kroppsobjektet og legger den ut med en RestTemplate.

Merk at opplastingen av enkeltfilen peker på / fileserver / singlefileupload / endepunkt.

Til slutt, samtalen restTemplate.postForEntity () fullfører jobben med å koble til den angitte URL-en 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. Laste opp flere filer

Ved opplasting av flere filer er den eneste endringen fra enkeltopplasting ved å konstruere forespørselens brødtekst.

La oss lage flere filer og legg dem til med samme nøkkel i MultiValueMap.

Åpenbart bør forespørselens URL referere til endepunkt for flere filopplasting:

MultiValueMap body = new 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 alltid mulig å modell enkeltfilopplasting ved å bruke flere filopplasting.

7. Konklusjon

Avslutningsvis så vi et tilfelle av MultipartFile overføring ved hjelp av våren RestTemplate.

Som alltid er eksemplet på klient- og serverkildekoden tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found