在multipart / form-data中解析content-disposition头文件名

时间:2010-05-29 09:13:13

标签: http multipartform-data content-disposition

根据RFC,在multipart / form-data content-disposition标头中 filename字段作为参数接收HTTP引用的字符串 - 在quites之间的字符串 字符'\'可以转义任何其他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"

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

有人有想法吗?

2 个答案:

答案 0 :(得分:2)

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

至少有一点是一致的是标题的filename部分以双引号结束,所以你只需要阅读filename=" final之间的所有内容 "

然后您可以将\\\"\"以外的任何反斜杠视为字面反斜杠,除非您认为用户特别有可能上传带有标签的文件名。 :)

答案 1 :(得分:1)

虽然是一个旧线程,但为可能感兴趣的人添加以下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();
    }