Servlets Servlet getSubmittedFileName从路径中删除斜杠
我使用Servlets Servlet getSubmittedFileName从路径中删除斜杠,servlets,httprequest,content-disposition,Servlets,Httprequest,Content Disposition,我使用file类型的input元素通过html表单上传文件 如果文件上载到Internet Explorer,则文件名中将包含路径 按如下方式获取文件名: Collection<Part> parts = request.getParts(); for (Part part: parts) { if (part.getName().equals(inputName)) { System.out.println(part.getSubmittedFileName());
file
类型的input
元素通过html表单上传文件
如果文件上载到Internet Explorer,则文件名中将包含路径
按如下方式获取文件名:
Collection<Part> parts = request.getParts();
for (Part part: parts) {
if (part.getName().equals(inputName)) {
System.out.println(part.getSubmittedFileName());
}
}
Collection parts=request.getParts();
用于(零件:零件){
if(part.getName().equals(inputName)){
System.out.println(part.getSubmittedFileName());
}
}
导致文件的文件名(在本例中是完整路径,因为它是通过ie上传的)显示为无斜杠(例如:如果路径是c://directory/file\u name
,则打印为c:directoryfile\u name
)
如果我自己用part.getHeader(“Content Disposition”)
获取标题,那么我会看到斜杠存在
发生了什么事?如何修复它,使斜杠位于getSubmittedFileName()
中
谢谢这似乎是Internet Explorer的一个错误:
/*
* Adapted from FileUploadBase.getFileName()
*/
@Override
public String getSubmittedFileName() {
(...)
// RFC 6266. This is either a token or a quoted-string
if (fileName.indexOf('\\') > -1) {
// This is a quoted-string
fileName = HttpParser.unquote(fileName.trim());
} else {
// This is a token
fileName = fileName.trim();
}
(...)
return fileName;
}
/*
* Adapted from FileUploadBase.getFileName()
*/
@Override
public String getSubmittedFileName() {
(...)
// RFC 6266. This is either a token or a quoted-string
if (fileName.indexOf('\\') > -1) {
// This is a quoted-string
fileName = HttpParser.unquote(fileName.trim());
} else {
// This is a token
fileName = fileName.trim();
}
(...)
return fileName;
}
所以为了避免这种情况发生,您需要自己评估part.getHeader(“内容处置”)
。首先,从该标题中提取filename
字段,例如:
filename=header.replaceFirst((?i)^.*filename=\”?([^\“]+)[\”;]?*$”,“$1”);
- 再次使用正则表达式:
filename=filename.replaceFirst(“^.+\\\\([^\\\\\]+)$”,“$1”);
- 使用引用的
FileUploadBase.getFileName(…)
- 使用的
FilenameUtils.getName(…)