【发布时间】:2014-12-01 10:23:55
【问题描述】:
我正在使用 JSP 将 Blob 文件从 HTML 表单上传到数据库。我需要将文件名插入数据库。我知道文件名存储在Content-Disposition header中,我怎么能得到呢?
【问题讨论】:
标签: java http jsp content-disposition
我正在使用 JSP 将 Blob 文件从 HTML 表单上传到数据库。我需要将文件名插入数据库。我知道文件名存储在Content-Disposition header中,我怎么能得到呢?
【问题讨论】:
标签: java http jsp content-disposition
如果您使用带有HttpServletRequest.getPart 的JavaEE 6 上传文件:
Part part = request.getPart("xxx"); // input type=file name=xxx
String disposition = part.getHeader("Content-Disposition");
String fileName = disposition.replaceFirst("(?i)^.*filename=\"?([^\"]+)\"?.*$", "$1");
见Part。
正如@Marc 提到的,我没有处理 URL 编码。 (他还使文件名周围的引号可选。)
fileName = URLDecoder.decode(fileName, StandardCharsets.ISO_8859_1);
未选中,但标头的 HTTP 编码应该是默认的 ISO-8859-1。
【讨论】:
name 的部分条目,因此将您的 filename 替换为 name。仍然得到filename 参数,因为您的正则表达式接受name= 之前的任何内容。我认为解析它的唯一方法是逐个字符地逐个迭代它,了解您是否在字符串中(文件名可能包含filename= 子字符串并误导您)
String regex = "(?i)^.*; " + paramName + "=\"?([^\"]+)\"?.*$";(paramName 应该是 name 或 filename 或任何你想得到的)。然后 2.return headerLine.replaceFirst(regex, "$1");