Java 确定文件I'的MIME类型;我正在下载

Java 确定文件I'的MIME类型;我正在下载,java,http,Java,Http,我正试图用下面的代码下载一个文件。我需要确定下载文件的文件名和mime类型。我从中下载的URL不包含文件名。我已经查看了与下面使用的缓冲流相关的方法,但没有看到任何方法可以做到这一点 con = (HttpURLConnection) url.openConnection(); //authenticate this request if (passwordAuthentication != null) { String auth = passwordA

我正试图用下面的代码下载一个文件。我需要确定下载文件的文件名和mime类型。我从中下载的URL不包含文件名。我已经查看了与下面使用的缓冲流相关的方法,但没有看到任何方法可以做到这一点

    con = (HttpURLConnection) url.openConnection();

    //authenticate this request
    if (passwordAuthentication != null) {
        String auth = passwordAuthentication.getUserName()+":"+passwordAuthentication.getPassword();
        con.setRequestProperty("Authentication", Base64.encodeBase64(auth.getBytes()).toString());
    }

    BufferedInputStream bis = new BufferedInputStream(con.getInputStream());
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName()));
    while ((i = bis.read()) != -1) {
        bos.write(i);
    }
    bos.flush();
    bis.close();
我发现我可以通过
stringcontenttype=con.getHeaderField(“contentType”)
,但返回的
text/html
不是下载的实际文件的ContentType

编辑:这不是重复的问题,其他方法不提供解决方案,如下所述

我现在已经尝试在没有文件扩展名的情况下保存文件,并使用
MagicMatch match=Magic.getMagicMatch(file,true)但它返回
文本/纯文本
。我猜这是因为我保存它时没有文件扩展名。

在Java 7中,您现在可以使用

这里的诀窍是,我下载的文件位于一个URL。这也是一个经过身份验证的请求。因此,需要用户名/密码才能访问目标URL处的文件。我还必须有一个文件名才能下载文件。这意味着我必须已经定义了文件扩展名:-\n您也可以尝试。此方法直接检查输入流的内容。@此处唯一的区别是,在确定mime类型之前,我需要先通过一个身份验证层。您可能需要尝试一下JMimeMagic库。它可以探测底层字节流中的内容类型(即,即使缺少文件扩展名,也可以探测内容类型)。我不能保证它的检测率,但肯定比URLConnections探测方法高。