确定我正在下载的文件的MIME类型

时间:2013-03-06 04:28:36

标签: java http

我正在尝试使用以下代码下载文件。我需要确定要下载的文件的文件名和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();

我看到我可以通过String contentType = con.getHeaderField("Content-Type");获取它,但是返回text/html而不是正在下载的实际文件的ContentType。

修改:这不是重复的问题,另一种方法不提供解决方案,如下所述。

我现在尝试保存没有文件扩展名的文件并使用MagicMatch match = Magic.getMagicMatch(file, true);,但它会返回text/plain。我猜这是因为我没有文件扩展名就保存了它。

1 个答案:

答案 0 :(得分:1)

在Java 7中,您现在可以使用 Files.probeContentType(path)