如何检查用户是否在java中实际上传APK文件。
通过仅检查文件的扩展名,用户可以将任何文件(例如:TXT文件)重命名为 apk 并上传。
我尝试检查特定文件的contentType
,如下所示:
if(apkFile.getContentType().equals("application/vnd.android.package-archive"))
但问题是,当从某些浏览器上传时,content type
为application/vnd.android.package-archive
,而其他一些浏览器则为application/octet-stream
。
检查这个的正确方法是什么?
答案 0 :(得分:0)
Apache tika parser
可以检测您的文件类型。虽然解析方法有点贵。解析文件后,文件元数据存储在MetaData
对象中。但是,您可以按照代码
import org.apache.tika.metadata.Metadata;
import org.apache.tika.sax.BodyContentHandler;
import org.apache.tika.parser.AutoDetectParser;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class Test {
public static void main(String[] args) {
File file = null;
InputStream is = null;
String contentType = null;
try {
//suppose f.apk file you renamed it f.txt
file = new File("path\\to\\your\\file\\f.txt");
is = new FileInputStream(file);
Metadata metadata = new Metadata();
BodyContentHandler handler = new BodyContentHandler();
AutoDetectParser parser = new AutoDetectParser();
try {
// This step takes some time.
parser.parse(is, handler, metadata);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
is.close();
}
contentType = metadata.get("Content-Type");
System.out.println("Content Type = " + contentType);
} catch (Exception e) {
e.printStackTrace();
}
}
}
必需的maven依赖
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.16</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.16</version>
</dependency>
答案 1 :(得分:0)
Apk是在zip
中格式化的,因此您可以检查它是否是一个zip文件,以降低它的概率。不是一个apk文件,除了检查文件扩展名。毕竟,并非所有的marplots都只更改文件扩展名从zip到apk