2012-06-12 16 views
11

क्या HttpURLConnection के साथ डाउनलोड की गई फ़ाइल का नाम प्राप्त करना संभव है?HttpURLConnection डाउनलोड फ़ाइल का नाम

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

बढ़िया question.Whenever हम प्राप्त हुए जबकि फ्लाई पर यूआरएल अनुरोध व्यायाम, उपयोग के इस मामले में महत्वपूर्ण ... – sskumar86

उत्तर

14

आप HttpURLConnection.getHeaderField(String name) इस्तेमाल कर सकते हैं Content-Disposition हैडर, जो आम तौर पर फ़ाइल नाम सेट करने के लिए प्रयोग किया जाता है पाने के लिए:

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? 
} 

के रूप में अन्य जवाब में बताया, सर्वर अवैध फाइल नाम वापस कर सकती है, लेकिन आप कोशिश कर सकते हैं

+0

धन्यवाद, यह विशेष सर्वर पैरामीटर प्राप्त करने के माध्यम से अनुरोध की गई प्रत्येक फ़ाइल के लिए सामग्री-डिस्पोजिशन भेज रहा है। सीधे लिंक के लिए मैं सिर्फ यूआरएल पार्स करूँगा। – capitano666

+0

हेडर से फ़ाइल नाम लाने के बाद, उस फ़ाइल को कहां से डाउनलोड करें? फाइल कहां होगी? कृपया मेरी मदद करें। धन्यवाद। – Dharmendra

+0

@ धर्मेंद्र आप इनपुट स्ट्रीम प्राप्त करने के लिए [URLConnection.getInputStream()] (http://docs.oracle.com/javase/6/docs/api/java/net/URLConnection.html#getInputStream()) का उपयोग कर सकते हैं। फ़ाइल में लिखें। –

4

फ्रैंक उत्तर है - जब तक कि वेब सर्वर सामग्री-विस्थापन शीर्षलेख में फ़ाइल नाम नहीं देता है, वहां वास्तविक फ़ाइल नाम नहीं है। हो सकता है कि आप इसे यूआरआई के आखिरी हिस्से में/और क्वेरी स्ट्रिंग से पहले सेट कर सकें।

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

सर्वर किसी तरह से फ़ाइल नाम भेज रहा है हो जाएगा वास्तव में, फ़ाइल नाम पता लगाने की कोशिश करता है, तो मैं एक वेब ब्राउज़र पर एक ही लिंक का उपयोग करें जिसे मुझे फ़ाइल को सहेजने के लिए पेश किया गया है और इसका नाम है। मुझे नहीं पता कि इसे कैसे प्राप्त किया जाए। – capitano666

+1

ठीक है, तो मुझे यकीन है कि नीचे स्निपेट मदद करेगा! –

0

Content-Disposition के लिए जांचें: प्रतिक्रिया में अनुलग्नक शीर्षलेख।

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 ("]", ""); 
       } 
      } 
संबंधित मुद्दे