【发布时间】:2020-05-19 00:15:40
【问题描述】:
我正在做一个程序来帮助我制作月度报告,但我一直坚持上传一种报告所需的照片。出于某种原因,它没有在控制器中获取数组。 我在后端使用 Springboot RestController,在另一端使用带有 BootstrapVue 和 vue-resource 的 Vue。
index.html (BootstrapVue):
<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,老实说我不想深入 JS 学习,所以可能在某个地方存在一些愚蠢的错误。无论如何,我都可以在 JS 方法中使用循环来一一上传,但这太难看了。我希望有更好的方法来做到这一点(当然不需要任何额外的 JS 库)。
【问题讨论】:
-
您的 API 是否允许发布数组数据类型或只是对象?
标签: rest spring-boot vue.js multipartform-data vue-resource