【问题标题】:Check file by format and not by extension按格式而不是扩展名检查文件
【发布时间】:2020-03-30 22:59:59
【问题描述】:
在我的应用程序中,我可以选择附加 pdf、png 文件等。可能有人将扩展名更改为恶意文件并放入 .pdf 或 .png。
我如何通过格式而不是文件扩展名来验证文件是 pdf 或 png,这就是我现在的做法?
我正在这样做:
if(file.endsWith("pdf")){
//is okey
}else{
//this is not a pdf file
}
【问题讨论】:
标签:
android
file
android-studio
pdf
kotlin
【解决方案1】:
所以我通过运行以下命令检查了文件是否为图像:
final Drawable drawable = BitmapDrawable.createFromPath(realFileName);
if (drawable != null) {
// Is an Image
}
如果您可以使用 API 26+,则可以使用 Files.probeContentType(file.toPath())。这将提供所提供文件的 MimeType。
最后,您可以使用 Apache Tika 检查文件的前几个字节。我以前没有这样做过,但它看起来像:
apps build.gradle
implementation group: 'org.apache.tika', name: 'tika-parsers', version: '1.22'
然后在需要的地方使用:
Tika tika = new Tika();
try {
Log.d(TAG, tika.detect(file));
} catch (IOException e) {
e.printStackTrace();
}
https://tika.apache.org/1.22/index.html
【讨论】:
-
请注意,这不会保护您或您的用户免受恶意软件的侵害!应该使用适当的病毒扫描程序(scanii.com 用于 SaaS 版本)来尝试清除 MalWare(它可以很好地隐藏在 PNG 和 PDF 文件中)。