MultipartFile feltöltése a Spring RestTemplate programmal
1. Áttekintés
Ez a gyors bemutató arra összpontosít, hogyan töltsön fel egy többrészes fájlt a Spring's RestTemplate segítségével.
Meglátjuk mindkettőt egyetlen fájl és több fájl - feltöltésa RestTemplate használatával.
2. Mi a HTTP többrészes kérés?
Egyszerűen fogalmazva: az alap HTTP POST kérelem törzslap név / érték párokban tárolja az űrlapadatokat.
Másrészt a HTTP-kliensek többszörös HTTP-kéréseket készíthetnek szöveges vagy bináris fájlok elküldésére a szerverre; főleg fájlok feltöltésére használják.
Egy másik gyakori eset az e-mail küldése mellékletként. A többrészes fájlkérések egy nagy fájlt kisebb darabokra bontanak, és határjelekkel jelzik a blokk kezdetét és végét.
Tudjon meg többet a többrészes kérésekről itt.
3. Maven-függőség
Ez az egyetlen függőség elegendő az ügyfélalkalmazáshoz:
org.springframework spring-web 5.2.2.FELHASZNÁLÁS
4. A Fájl feltöltési kiszolgáló
A fájlkiszolgáló API két REST végpontot tesz közzé egy, illetve több fájl feltöltéséhez:
- POST / fájlkiszolgáló / singlefileupload /
- POST / fájlkiszolgáló / multiplefileupload /
5. Egyetlen fájl feltöltése
Először nézzük meg egyetlen fájl feltöltése a RestTemplate.
Alkotnunk kell HttpEntityfejléc és test. Állítsa be a tartalom típus fejléc értéke MediaType.MULTIPART_FORM_DATA. Ha ez a fejléc be van állítva, RestTemplate automatikusan marsallálja a fájl adatait néhány metaadattal együtt.
A metaadatok tartalmazzák a fájl nevét, fájlméretét és a fájltartalom típusát (például szöveg / sima):
HttpHeaders fejlécek = new HttpHeaders (); fejlécek.setContentType (MediaType.MULTIPART_FORM_DATA);
Ezután építse fel a kérelem törzsét a LinkedMultiValueMap osztály. LinkedMultiValueMap pakolások LinkedHashMap több érték tárolása az egyes kulcsokhoz a LinkedList.
Példánkban a getTestFile () metódus menet közben generál dummy fájlt, és visszaadja a FileSystemResource:
MultiValueMap body = new LinkedMultiValueMap (); body.add ("fájl", getTestFile ());
Végül készítsen egy HttpEntity példány, amely beburkolja a fejlécet és a törzsobjektumot, és a a segítségével tegye fel RestTemplate.
Vegye figyelembe, hogy az egyetlen fájl feltöltése a / fileserver / singlefileupload / végpont.
Végül a hívás restTemplate.postForEntity () befejezi azt a feladatot, hogy csatlakozzon az adott URL-hez és elküldje a fájlt a kiszolgálónak:
HttpEntity requestEntity = új HttpEntity (törzs, fejlécek); String serverUrl = "// localhost: 8082 / spring-rest / fileserver / singlefileupload /"; RestTemplate restTemplate = új RestTemplate (); ResponseEntity response = restTemplate .postForEntity (serverUrl, requestEntity, String.class);
6. Több fájl feltöltése
Több fájl feltöltésekor az egyetlen fájl feltöltésével szemben az egyetlen változás a kérelem törzsének elkészítése.
Hozzunk létre több fájlt és add hozzá őket ugyanazzal a kulccsal ban ben MultiValueMap.
Nyilvánvaló, hogy a kérelem URL-jének hivatkoznia kell a több fájl feltöltésének végpontjára:
MultiValueMap body = new LinkedMultiValueMap (); body.add ("fájlok", getTestFile ()); body.add ("fájlok", getTestFile ()); body.add ("fájlok", getTestFile ()); HttpEntity requestEntity = új HttpEntity (törzs, fejlécek); String serverUrl = "// localhost: 8082 / spring-rest / fileserver / multiplefileupload /"; RestTemplate restTemplate = új RestTemplate (); ResponseEntity response = restTemplate .postForEntity (serverUrl, requestEntity, String.class);
Mindig lehetséges modell egy fájl feltöltését a több fájl feltöltésével.
7. Következtetés
Összegzésként láttunk egy esetet MultipartFile transzfer a Tavasz használatával RestTemplate.
Mint mindig, a példa kliens és szerver forráskódja elérhető a GitHubon.