11

根据 RFC,在 multipart/form-data content-disposition 标头文件名字段中接收作为参数 HTTP 引用字符串 - 之间的字符串,其中字符 '\' 可以转义任何其他 ascii 字符。

问题是,网络浏览器不这样做。

IE6 发送:

Content-Disposition: form-data; name="file"; filename="z:\tmp\test.txt"

而不是预期

Content-Disposition: form-data; name="file"; filename="z:\\tmp\\test.txt"

应该z:tmptest.txt根据规则而不是z:\tmp\test.txt.

Firefox、Konqueror 和 Chrome 不会转义 " 字符,例如:

Content-Disposition: form-data; name="file"; filename=""test".txt"

而不是预期

Content-Disposition: form-data; name="file"; filename="\"test\".txt"

那么......你会建议如何处理这个问题?

有人有想法吗?

4

2 回答 2

4

虽然是一个旧线程,但为可能感兴趣的人添加以下 java 解决方案。

// import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.*;

    try {
        ContentDisposition contentDisposition = new ContentDisposition("attachment; filename=\"myfile.log\"; filename*=UTF-8''myfile.log");
        System.out.println(contentDisposition.getParameter("filename"));
    } catch (ParseException e) {
        e.printStackTrace();
    }
于 2016-05-18T07:42:57.557 回答
2

您是否有理由需要解析此文件名?

至少一致的一件事是filename标题的部分以双引号结尾,因此您只需要阅读filename="final "之间的所有内容。

然后,您可以将除\\,\"\"文字反斜杠之外的任何反斜杠处理,除非您认为用户特别有可能上传带有制表符的文件名。:)

于 2010-05-30T11:19:40.700 回答