2012-06-12 35 views
11

HttpURLConnection ile indirilen bir dosyanın adını almak mümkün mü? Ben URL'den dosya adını ayıklamak olamaz, ama sunucu bir şekilde bana dosya adını gönderir Yukarıdaki örnekteHttpURLConnection indirilen dosya adı

URL url = new URL("http://somesite/getFile?id=12345"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestMethod("GET"); 
conn.setAllowUserInteraction(false); 
conn.setDoInput(true); 
conn.setDoOutput(true); 
conn.connect(); 
InputStream is = conn.getInputStream(); 

.

+0

Fantastik question.Whenever biz anında url isteği egzersiz, bu kullanım örneği ... – sskumar86

cevap

14

Normalde dosya adını ayarlamak için kullanılır Content-Disposition başlığını almak için HttpURLConnection.getHeaderField(String name) kullanabilirsiniz: Diğer yanıt belirttiği gibi

String raw = conn.getHeaderField("Content-Disposition"); 
// raw = "attachment; filename=abc.jpg" 
if(raw != null && raw.indexOf("=") != -1) { 
    String fileName = raw.split("=")[1]; //getting value after '=' 
} else { 
    // fall back to random generated file name? 
} 

, sunucu geçersiz dosya adını döndürebilir, ancak deneyebilirdi.

+0

Teşekkürler, bu belirli sunucu, get parametresiyle istenen her dosya için Content-Disposition'ı gönderiyor görünüyor. Doğrudan bağlantılar için sadece URL'yi ayrıştıracağım. – capitano666

+0

Dosya adını başlıktan getirdikten sonra, Bu dosyayı indirmek için Nereden? Dosya nerede olacak? Lütfen bana yardım edin. Teşekkürler. – Dharmendra

+0

@Dharmendra Giriş akışını almak için [URLConnection.getInputStream()] 'i (http://docs.oracle.com/javase/6/docs/api/java/net/URLConnection.html#getInputStream()) kullanabilirsiniz. dosyaya yaz. –

4

Açık yanıt: Web sunucusu Content-Disposition başlığındaki dosya adını döndürmedikçe, gerçek bir dosya adı yoktur. Belki de, URI'nin son bölümünü sorgu dizesinden önce ve sonra ayarlayabilirsiniz.

Map m =conn.getHeaderFields(); 
if(m.get("Content-Disposition")!= null) { 
//do stuff 
} 
+0

sunucu bir şekilde dosya adı gönderiyor önemli olacaktır ederken aslında, elde edilen dosya adını belirlemeye çalışır eğer bir web tarayıcısında aynı bağlantıyı kullanıyorum, dosyayı kaydetmem teklif edildi ve bir ismi var. Sadece nasıl getireceğimi bilmiyorum. – capitano666

+1

Eh, o zaman aşağıdaki snippet'in yardımcı olacağına eminim! –

0

Yanıtta ek bağlantı başlığı için Content-Disposition: ekini kontrol edin.

0
Map map = connection.getHeaderFields(); 
      if (map.get ("Content-Disposition") != null) 
      { 
       String raw = map.get ("Content-Disposition").toString(); 
       // raw = "attachment; filename=abc.jpg" 
       if (raw != null && raw.indexOf ("=") != -1) 
       { 
        fileName = raw.split ("=")[1]; // getting value after '=' 
        fileName = fileName.replaceAll ("\"", "").replaceAll ("]", ""); 
       } 
      }