非 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");