0

我正在尝试使用以下代码下载文件。我需要确定正在下载的文件的文件名和 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. 我猜那是因为我在没有文件扩展名的情况下保存了它。

4

1 回答 1

1

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

于 2013-03-06T04:45:15.113 回答