编码非ascii文件名

时间:2015-09-06 14:17:12

标签: dropzone.js

对于带有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

或者还有其他解决方案吗?

2 个答案:

答案 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");