Я делаю программу, которая поможет мне делать ежемесячные отчеты, и я застрял при загрузке фотографий, которые мне нужны для одного вида отчетов. По какой-то причине он не получает массив в контроллере. Я использую Springboot RestController в бэкэнде и Vue с BootstrapVue и vue -ресурсом на другой стороне.
index. html (Bootstrap Vue):
<b-form-file
v-model="photos"
accept="image/*"
multiple
placeholder="..."
></b-form-file>
<b-button @click="uploadPhotos">Upload</b-button>
внутри vuemain. js:
data: {
photos: null,
},
methods: {
uploadPhotos(){
var formData = new FormData();
formData.append("photos", this.photos);
this.$http.post('reports/photo', formData).then(result => {
...
})
}, ...
внутри контроллера:
@PostMapping("/photo")
public void addPhoto(@RequestParam("photos") MultipartFile[] photo) {
System.out.println(photo.length); // shows 0
}
что я вижу внутри Params в браузере:
XHRPOSThttp://localhost:8080/reports-maker/reports/photo
[HTTP/1.1 500 326ms]
Request payload
-----------------------------4469196632041005505545240657
Content-Disposition: form-data; name="photos"
[object File],[object File],[object File],[object File]
-----------------------------4469196632041005505545240657--
По какой-то причине на данный момент @RequestParam("photos") MultipartFile[] photo
это пустой массив. Но если я изменю его на одну фотографию, например, такую: @RequestParam("photos") MultipartFile photo
и отправлю одну из js: formData.append("photos", this.photos[0]);
, все будет хорошо, и фотография будет загружена на сервер.
Это мой первый опыт работы с Vue и, честно говоря, я не хочу go углубляться в JS обучение, поэтому, вероятно, где-то есть какая-то глупая ошибка. В любом случае, я могу использовать al oop в JS методе, чтобы загрузить их один за другим, но это было бы так ужасно. Я надеюсь, что есть лучший способ сделать это (без каких-либо дополнительных JS библиотек, конечно).