Nahrávanie súboru MultipartFile s Spring RestTemplate

1. Prehľad

Táto rýchla príručka sa zameriava na to, ako nahrať viacdielny súbor pomocou Spring’s RestTemplate.

Uvidíme oboje jeden súbor a viac súborov - nahraťpomocou RestTemplate.

2. Čo je požiadavka na viacdielne HTTP?

Jednoducho povedané, základné telo požiadavky HTTP POST obsahuje údaje formulára v pároch názov / hodnota.

Na druhej strane môžu klienti HTTP zostaviť viacdielne požiadavky HTTP na odoslanie textových alebo binárnych súborov na server; používa sa hlavne na nahrávanie súborov.

Ďalším bežným prípadom použitia je odoslanie e-mailu s prílohou. Požiadavky na viacdielny súbor rozdelia veľký súbor na menšie časti a na označenie začiatku a konca bloku použijú hraničné značky.

Preskúmajte viac informácií o požiadavkách na viac častí tu.

3. Maven závislosť

Pre klientsku aplikáciu stačí táto jediná závislosť:

 org.springframework spring-web 5.2.2.RELEASE 

4. The Server na nahrávanie súborov

Rozhranie API súborového servera sprístupňuje dva koncové body REST na nahrávanie jedného a viacerých súborov:

  • POST / súborový server / singlefileupload /
  • POST / fileserver / multiplefileupload /

5. Odovzdanie jedného súboru

Najprv sa pozrime upload jedného súboru pomocou RestTemplate.

Musíme tvoriť HttpEntitys hlavičkou a telom. Nastaviť Druh obsahu hodnota hlavičky do MediaType.MULTIPART_FORM_DATA. Keď je nastavená táto hlavička, RestTemplate automaticky zaradí dáta súboru spolu s niektorými metadátami.

Metadáta zahŕňajú názov súboru, veľkosť súboru a typ obsahu súboru (napríklad text / obyčajný):

Hlavičky HttpHeaders = nové HttpHeaders (); headers.setContentType (MediaType.MULTIPART_FORM_DATA);

Ďalej zostavte telo žiadosti ako inštanciu LinkedMultiValueMap trieda. LinkedMultiValueMap zavinovačky LinkedHashMap ukladanie viacerých hodnôt pre každý kľúč do a LinkedList.

V našom príklade getTestFile () metóda generuje fiktívny súbor za behu a vráti a FileSystemResource:

Body MultiValueMap = nový LinkedMultiValueMap (); body.add ("súbor", getTestFile ());

Nakoniec zostrojte HttpEntity inštancia, ktorá zahaľuje objekt hlavičky a tela a uverejňuje ich pomocou a RestTemplate.

Upozorňujeme, že nahrávanie jedného súboru smeruje na / fileserver / singlefileupload / koncový bod.

Na záver hovor restTemplate.postForEntity () dokončí úlohu spojenia s danou adresou URL a odoslanie súboru na server:

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

6. Odovzdávanie viacerých súborov

Pri nahrávaní viacerých súborov je jedinou zmenou oproti nahrávaniu jedného súboru konštrukcia tela žiadosti.

Vytvorme viac súborov a pridajte ich rovnakým kľúčom v MultiValueMap.

Je zrejmé, že adresa URL žiadosti by mala odkazovať na koncový bod pre nahrávanie viacerých súborov:

Body MultiValueMap = nový LinkedMultiValueMap (); body.add ("súbory", getTestFile ()); body.add ("súbory", getTestFile ()); body.add ("súbory", getTestFile ()); HttpEntity requestEntity = new HttpEntity (body, headers); Reťazec serverUrl = "// localhost: 8082 / spring-rest / fileserver / multiplefileupload /"; RestTemplate restTemplate = nový RestTemplate (); ResponseEntity response = restTemplate .postForEntity (serverUrl, requestEntity, String.class);

Vždy sa to dá modelovať nahrávanie jedného súboru pomocou nahrávania viacerých súborov.

7. Záver

Na záver sme videli prípad MultipartFile prenos pomocou pružiny RestTemplate.

Vzorový zdrojový kód klienta a servera je ako vždy k dispozícii na serveri GitHub.


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