我試圖使用下面的代碼下載文件。我需要確定正在下載的文件的文件名和MIME類型。我從下載的URL不包含文件名。我查看了下面使用的緩衝流的方法,但沒有看到任何方法來做到這一點。確定正在下載的文件的MIME類型
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
。我猜這是因爲我保存了它沒有文件擴展名。
@Perception這裏唯一的區別是,我有我需要得到過去之前,我可以確定MIME類型的驗證層。 – Webnet 2013-03-06 05:09:29
你可能想給JMimeMagic庫一個旋轉。它可以探測來自底層字節流的內容類型(即使文件擴展名,內容類型丟失)。我不能保證它的檢測率,但它高於URLConnections探測方法,這是肯定的。 – Perception 2013-03-06 06:47:39