在JAVA中上传APK文件的内容类型检查

时间:2017-12-05 06:49:09

标签: java spring spring-mvc

如何检查用户是否在java中实际上传APK文件。

通过仅检查文件的扩展名,用户可以将任何文件(例如:TXT文件)重命名为 apk 并上传。

我尝试检查特定文件的contentType,如下所示:

if(apkFile.getContentType().equals("application/vnd.android.package-archive")) 

但问题是,当从某些浏览器上传时,content typeapplication/vnd.android.package-archive,而其他一些浏览器则为application/octet-stream

检查这个的正确方法是什么?

2 个答案:

答案 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