Http 解析内容处置头';s文件名在多部分中/来自数据
根据RFC,在多部分/表单数据内容处理头中 filename字段作为参数HTTP quoted string接收-退出之间的字符串,其中 字符“\”可以转义任何其他ascii字符 问题是,网络浏览器不能做到这一点 IE6发送:Http 解析内容处置头';s文件名在多部分中/来自数据,http,multipartform-data,content-disposition,Http,Multipartform Data,Content Disposition,根据RFC,在多部分/表单数据内容处理头中 filename字段作为参数HTTP quoted string接收-退出之间的字符串,其中 字符“\”可以转义任何其他ascii字符 问题是,网络浏览器不能做到这一点 IE6发送: Content-Disposition: form-data; name="file"; filename="z:\tmp\test.txt" 而非预期 Content-Disposition: form-data; name="file"; filename="z:\
Content-Disposition: form-data; name="file"; filename="z:\tmp\test.txt"
而非预期
Content-Disposition: form-data; name="file"; filename="z:\\tmp\\test.txt"
Content-Disposition: form-data; name="file"; filename="\"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="z:\\tmp\\test.txt"
Content-Disposition: form-data; name="file"; filename="\"test\".txt"
那么…你建议如何处理这个问题
有人知道吗?有什么理由需要解析这个文件名吗 至少有一点是一致的,那就是标题的
文件名部分以双引号结尾,因此您只需要读入文件名=“
和最后一个”
之间的所有内容
然后,您可能可以将除\\
、\“
或\”
以外的任何反斜杠视为文字反斜杠,除非您认为用户特别可能会上载带有选项卡的文件名。:)尽管是一个旧线程,但为可能感兴趣的人添加以下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();
}
“您需要解析此文件名有什么原因吗?”--是的,我想知道文件名;)。“至少有一点是一致的,即头的文件名部分以双引号结尾,“文件名和名称字段不应按此特定顺序出现,因此假设文件名以最后一个引号结尾是不好的。想要!=需要。;)好的,那么您至少可以保证它将以“
或”结尾代码>--在缺乏一致性的情况下,您必须做出一些让步,比如依赖于用户不会将"; 在文件名的中间,代码:(或者,你是否使用了一个支持你对这个属性进行最大程度的解析的Web框架?因为问题不属于java,所以解释如何解决这个问题是有用的。在寻找相同的问题时,我甚至发现了一个讨论regex模式()的线程。添加此解决方案,因为它可能在相同的上下文中帮助某人。人们只需在谷歌上搜索合适的关键词就可以登陆这里,如果他们碰巧是Java玩家,可能会发现它很有用。