目标:用户上传图片,验证者检查以确保它是用户上传的图片文件,如果不是图片则返回消息,如果不是,则返回消息。
问题:单击“上载”按钮时,无论上载的文件是图像还是图像,都始终返回验证器消息。
焦点区域:在Validator类中,行System.out.println(partValueContentType);
已将内容类型写入控制台,例如。 image/jpeg
,但是当它在if
语句中进行测试时,它似乎根本不评估内容类型。
String partValueContentType = part.getContentType();
System.out.println(partValueContentType);
if (!partValueContentType.equals("image/jpeg")
|| !partValueContentType.equals("image/jpg")
|| !partValueContentType.equals("image/gif")
|| !partValueContentType.equals("image/png"))
{
FacesMessage msg = new FacesMessage("File is not an image.",
"Acceptable image types (jpeg, jpg, gif, png)");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
这是如何引起的?如何解决?
答案 0 :(得分:1)
你的if语句有点偏离:
String partValueContentType = part.getContentType();
System.out.println(partValueContentType);
if (!(partValueContentType.equals("image/jpeg")
|| partValueContentType.equals("image/jpg")
|| partValueContentType.equals("image/gif")
|| partValueContentType.equals("image/png")))
{
FacesMessage msg = new FacesMessage("File is not an image.",
"Acceptable image types (jpeg, jpg, gif, png)");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
在验证方面,您可能需要检查文件本身以确保它是真正的图片(它不是隐藏为.jpeg的.zip)并且可能强制执行文件大小限制...
或者使用HashSet:
String partValueContentType = part.getContentType();
System.out.println(partValueContentType);
Set<String> acceptedMimeTypes = new HashSet<>(Arrays.asList("image/jpeg", "image/jpg", "image/gif", "image/png"));
if (!acceptedMimeTypes.contains(partValueContentType))
{
FacesMessage msg = new FacesMessage("File is not an image.",
"Acceptable image types " + Arrays.toString(acceptedMimeTypes.toArray()));
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}