对于带有drop zone.js的上传文件,包含非ascii字符的文件名在发送到服务器之前不会被编码。他们只是保持原样:
------WebKitFormBoundaryvXgdeNXSwHZBUrFJ
Content-Disposition: form-data; name="file[0]"; filename="täst.png"
因此,服务器端编码未知。
有没有办法强制dropzone.js到UrlEncode文件名,类似于RFC 6266?
Content-Disposition: form-data; name="file[0]"; filename*=utf-8''t%c3%a4st.png
或者还有其他解决方案吗?
答案 0 :(得分:3)
我遇到了同样的问题,我最终要做的就是传递一个额外的参数。
$("#myDz").dropzone({
init: function () {
this.on("sending", function(file, xhr, formData) {
var fn = encodeURI(file.name)
formData.append("encFilename", fn);
});
}
});
这会将附加参数encFilename
发送到后端,然后可以在将文件写入磁盘时将其命名。 file.name
无法在此时更新,但这样做就可以了。
答案 1 :(得分:1)
IamNaN的解决方案运行正常。只需要在Java WS中解码:
filename = java.net.URLDecoder.decode(filename, "UTF-8");