问题
使用时
<input type="file" name="file" multiple />
文件将全部用发送
name="file",例如:
Content-Disposition: form-data; name="file"; filename="foo.jpg"Content-Type: image/jpeg............ ..........Content-Disposition: form-data; name="file"; filename="bar.jpg"Content-Type: image/jpeg..............
这是一个正确的参数Struts2的文件上传拦截器能接收,工作与
List<File>和相关
List<String>的 文件名 和
的contentType 。
相反,当您使用dropzone.js时,文件名将被追加
[]以附加到处理多个输入客户端:
paramName:要传输的文件参数的名称。默认为文件。 注意 : 如果您将选项uploadMultiple
设置为true,则Dropzone将追加[]到名称中。
例如。
Content-Disposition: form-data; name="file[0]"; filename="foo.jpg"Content-Type: image/jpeg............ ..........Content-Disposition: form-data; name="file[1]"; filename="bar.jpg"Content-Type: image/jpeg..............
Struts2根本不喜欢它。
解
不用弄乱自定义的拦截器和转换器,只需对
dropzone.js用于Struts2项目的库进行简单的调整即可:
- 重命名
dropzone.js
为dropzone-struts2.js
; - 打开文件并搜索
"[" + n + "]"
(最新版本为866行) - 更改此行
return "" + this.options.paramName + (this.options.uploadMultiple ? "[" + n + "]" : "");
到这个
return "" + this.options.paramName; //+ (this.options.uploadMultiple ? "[" + n + "]" : "");
现在,它已兼容Struts2,并且可以处理多个上传。



