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.