Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 解析内容处置头';s文件名在多部分中/来自数据_Http_Multipartform Data_Content Disposition - Fatal编程技术网

Http 解析内容处置头';s文件名在多部分中/来自数据

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:\

根据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:\\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();
    }

“您需要解析此文件名有什么原因吗?”--是的,我想知道文件名;)。“至少有一点是一致的,即头的文件名部分以双引号结尾,“文件名和名称字段不应按此特定顺序出现,因此假设文件名以最后一个引号结尾是不好的。想要!=需要。;)好的,那么您至少可以保证它将以
”结尾--在缺乏一致性的情况下,您必须做出一些让步,比如依赖于用户不会将
";