我必须在上传时找到文件的原始内容类型(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/,它可以工作。
发布于 2016-07-08 10:50:32
文件内容类型由上传时的用户代理/浏览器确定。正如您已经知道的,这可能被欺骗,或不正确。实际上,只有文件的内容类型才能做更多的事情。
另一种方法是在验证了内容类型之后进行更多的检查,方法是尝试使用iText、PDFBox或一些类似的库打开PDF以进行读取。如果您无法打开该文件,则可以让用户知道该文件有问题。
发布于 2016-07-08 13:33:53
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;
}https://stackoverflow.com/questions/38264533
复制相似问题