如何检查不基于文件名/扩展名的文件类型

时间:2013-06-05 08:50:14

标签: java

在我的应用程序中,我们正在上传图像/音频/视频文件。我已经允许每种类型的一些固定的允许扩展。如果扩展名与提供的扩展名列表不匹配则不会上传,但如果用户将.exe,.pdf文件重命名为.jpg或.png,则会清除UI验证并调用servlet并上传会发生的。但稍后会引起问题。

有没有办法在后端检查相同内容然后相应地抛出异常。

我尝试过使用:

import java.net.*;

public class FileUtils{
    public static String getMimeType(String fileUrl) throws java.io.IOException {
        FileNameMap fileNameMap = URLConnection.getFileNameMap();
        String type = fileNameMap.getContentTypeFor(fileUrl);
        return type;
    }

    public static void main(String args[]) throws Exception {
        System.out.println(FileUtils.getMimeType("file:/home/kavinder/file.pdf"));
        // this is a .jpg file renamed to .pdf
    }
}

这仅根据扩展名返回。和

import javax.activation.MimetypesFileTypeMap;
import java.io.File;

class GetMimeType {
    public static void main(String args[]) {
        File f = new File("/home/kavinder/file.jpg");
        System.out.println("Mime Type of " + f.getName() + " is " + new MimetypesFileTypeMap().getContentType(f));
    }
}

这总是将mime类型返回为:application / octet-stream

提前谢谢

0 个答案:

没有答案