我必须在上传时找到文件的原始内容类型(MIME类型)。
我想只允许PDF文件,但如果我将.exe fiel重命名为.pdf flie,则其类型显示为pdf。
我想限制这类文件。
我使用以下代码:
if (!fileMultipart.getContentType().equalsIgnoreCase("application/pdf")) {
msg = "Only pdf files are allowed.";
System.out.println("Only pdf files are allowed.");
}
此外,还有一些在线工具可用于查找原始内容类型。我尝试使用http://www.checkfiletype.com/并且它有效。
答案 0 :(得分:0)
文件内容类型由上载时的用户代理/浏览器确定。如您所知,这可能是欺骗或不正确的。实际上,只有文件的内容类型才能做到。
另一种方法是在您通过尝试使用iText,PDFBox或某些类似的库打开PDF进行阅读来验证内容类型后进行更多检查。如果您无法打开该文件,那么您可以让用户知道它有问题。
答案 1 :(得分:0)
public boolean isPDF(String fileName) {
File file = new File(fileName);
System.out.println("file upload isExist " + file.exists());
boolean result = false;
//Scanner input = null;
try {
Scanner input = new Scanner(new FileReader(file));
System.out.println("fileScanner input " + input);
while (input.hasNextLine()) {
final String checkline = input.nextLine();
if (checkline.contains("%PDF-")) {
// a match!
result = true;
break;
}
}
} catch (FileNotFoundException ex) {
System.out.println("file upload is not valid " + file);
Logger.getLogger(UploadContractorFile.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("file upload final result " + result);
return result;
}