非 ascii 文件名的编码
Encoding of non-ascii file names
对于使用 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
或者有其他解决办法吗?
我 运行 遇到了同样的问题,我最终解决这个问题的方法是传递一个额外的参数。
$("#myDz").dropzone({
init: function () {
this.on("sending", function(file, xhr, formData) {
var fn = encodeURI(file.name)
formData.append("encFilename", fn);
});
}
});
这会将附加参数 encFilename
发送到后端,然后可以在将文件写入磁盘时使用该参数命名文件。 file.name
那时无法更新,但这样做效果很好。
IamNaN 的解决方案工作正常。只需要解码在Java WS:
filename = java.net.URLDecoder.decode(filename, "UTF-8");
对于使用 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
或者有其他解决办法吗?
我 运行 遇到了同样的问题,我最终解决这个问题的方法是传递一个额外的参数。
$("#myDz").dropzone({
init: function () {
this.on("sending", function(file, xhr, formData) {
var fn = encodeURI(file.name)
formData.append("encFilename", fn);
});
}
});
这会将附加参数 encFilename
发送到后端,然后可以在将文件写入磁盘时使用该参数命名文件。 file.name
那时无法更新,但这样做效果很好。
IamNaN 的解决方案工作正常。只需要解码在Java WS:
filename = java.net.URLDecoder.decode(filename, "UTF-8");