根据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"
那么......你会如何建议处理这个问题?
有人有想法吗?
答案 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();
}