在multipart/from-data中解析content-disposition header的文件名

Art*_*yom 10 http multipartform-data content-disposition

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

问题是,Web浏览器不这样做.

IE6发送:

Content-Disposition: form-data; name="file"; filename="z:\tmp\test.txt"
Run Code Online (Sandbox Code Playgroud)

而不是预期

Content-Disposition: form-data; name="file"; filename="z:\\tmp\\test.txt"
Run Code Online (Sandbox Code Playgroud)

哪个应该z:tmptest.txt按照规则解析而不是z:\tmp\test.txt.

Firefox,Konqueror和Chrome不会逃脱"角色":

Content-Disposition: form-data; name="file"; filename=""test".txt"
Run Code Online (Sandbox Code Playgroud)

而不是预期

Content-Disposition: form-data; name="file"; filename="\"test\".txt"
Run Code Online (Sandbox Code Playgroud)

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

有人有想法吗?

Pav*_*mar 5

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


Chr*_*Orr 2

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

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

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

  • “你有什么理由需要解析这个文件名吗?” -- 是的,我想知道文件名;)。“至少一致的一件事是标头的文件名部分以双引号结尾,”文件名和名称字段不应按此特定顺序出现,因此假设文件名以最后一个结尾是个坏主意引号。 (4认同)