当我用dropzone.js上传多个文件时,不知道如何用spring mvc接收参数

gab6jxml  于 2022-12-29  发布在  Spring
关注(0)|答案(2)|浏览(157)

当我使用dropzone.js上传很多文件时,问题就出现了。
我需要向POST请求添加更多参数,我已经阅读了dropzonejs.com上的文档和github.com上的wiki,参数已添加到请求中。
问题是文件的默认参数是files[0]files[1]...(我把paramName选项设置为files),但我无法用java spring mvc代码接收files参数。
这是我的spring mvc控制器代码:

@RequestMapping("/upload")
    public Map<String,Object> method(CaseInfo info,HttpServletRequest request,@RequestParam("files[]")MultipartFile[] files){
        ...
    }

这是我的js核心代码:

this.on("sending", function(file, xhr, formData){
                    console.log("formData ->", formData);
                    var frm = $('#form');
                    var data = frm.serializeArray();
                    console.log('data ->', data);
                    for (var obj in data) {
                        formData.append(obj.name, obj.value);
                    }
                });

控制器就是不能接收文件参数,别人的名字是undefined

编辑日期:

我把for-in改成了below,undefined的问题就解决了。但是我不知道为什么...有人知道吗?

for (var i = data.length - 1; i >= 0; i--) {
                        var obj = data[i];
                        formData.append(obj.name,obj.value);
                    }
mklgxw1f

mklgxw1f1#

我通过覆盖js源代码解决了这个问题。

Dropzone.prototype._getParamName = function(n) {
            if (typeof this.options.paramName === "function") {
                return this.options.paramName(n);
            } else {
//                return "" + this.options.paramName + (this.options.uploadMultiple ? "[" + n + "]" : "");
                return "" + this.options.paramName;
            }
        };
zbq4xfa0

zbq4xfa02#

理解这是一个老问题,但我已经成功地将“sending”选项更改为“sendingmultiple”,然后传递一个函数,该函数仅返回“files”以匹配spring控制器签名:
日本

sendingmultiple: function(files, xhr, formData) {
        // additional request paramter
        formData.append('media', JSON.stringify(media));
        for (const [key, value] of formData) {
            console.log('key: ' + key + ' value: ' + value);
        }
    },
    acceptedFiles: "image/*",
    uploadMultiple: true,
    paramName: function() { return "files"; }

java

@PostMapping("/user/media/upload")
    @ResponseStatus(HttpStatus.CREATED)
    public User uploadMedia(@RequestParam String media, @RequestParam("files") MultipartFile[] files) {

相关问题