Java, Spring - upload kilku plików

Java, Spring - upload kilku plików
MR
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:8
0

Cześć,

Chciałbym zrobić upload kilku plików na raz w javie. Napisałem sobie taką oto metodę:

Kopiuj
    @RequestMapping(value = RestURI.FILE_STORE, method = RequestMethod.POST, headers = ("content-type=multipart/*"))
    @ResponseStatus(HttpStatus.CREATED)
    public List<FileStoreDTO> uploadFile(@RequestParam("file") MultipartFile[] files) throws IOException {
        return fileStoreService.upload(files);
    }

ale wysyłając 1 czy też kilka plików zmienna files jest pusta. Zamiana MultipartFile[] na List<MultipartFile> również nie pomaga. Co ciekawe zmieniając typ po prostu na MultipartFile przychodzi już plik.
Proszę o pomoc w rozwiązaniu problemu

edytowany 3x, ostatnio: mryndak
RA
  • Rejestracja:około 11 lat
  • Ostatnio:8 miesięcy
  • Postów:93
0

Jesteś pewien że chcesz wysyłać kilka plików na raz w jednym requescie. Ja mam to zrobione tak:

Kopiuj
@CrossOrigin
	@RequestMapping(value="/test", method = RequestMethod.POST)
	public String uploadFileTest(@RequestParam("uploadedFile") MultipartFile uploadedFileRef) {
		String fileName = uploadedFileRef.getOriginalFilename();
		String path = "C:/uploads/" + fileName;
		byte[] buffer = new byte[1000];
		File outputFile = new File(path);
		int totalBytes = saveFileOnDisk(uploadedFileRef, buffer, outputFile);
		return "File uploaded successfully! Total Bytes Read=" + totalBytes;
	}
MR
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:8
0

Tak - chciałbym wysłać kilka plików na raz. Czy jest to mało optymalne rozwiązanie niż stukanie z pojedynczym plikiem?
Nie chciałbym też encodować pliku do base64 i wysyłać go w jsonie, ponieważ potrzebuje zapisać na bazie danych min. nazwę pliku.

edytowany 1x, ostatnio: mryndak
PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:4 miesiące
  • Postów:2787
0

a nie lepiej mieć metodę dla pojedynczego pliku i potem wielokrotnie ją wołać?

MI
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
0

Miałem ten sam problem..
Rozwiązaniem było dodanie magicznych [], więc u Ciebie będzie to wyglądało tak: @RequestParam("file[]") MultipartFile[] files

Oczywiście tam gdzie wysyłasz z widoku też musisz te nawiasy dodać..

Przykładzik z angulara:

Kopiuj
var formData = new FormData();
angular.forEach($scope.file, function (iter) {
                    formData.append("file[]", iter);
                });
 $http.post("/twoj/url", formData);

Każdy pliczek z multiple upload przypisuję do file[] i to postuję, odbieram poprzez requestParam "file[]"

edytowany 1x, ostatnio: Mikey
MR
a headers w @RequestMaping masz ustawiony ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.