2012-12-08 16 views
5

मैं एक वेबसर्वर से एक फ़ाइल डाउनलोड करने की कोशिश कर रहा हूं और इसे मूल फ़ाइल नाम के तहत सहेज रहा हूं जो सर्वर फ़ाइल के साथ भेज रहा है। काम बहुत अच्छी तरह से डाउनलोड कर रहा है, लेकिन मैं असली फ़ाइल नाम प्राप्त करने में सक्षम नहीं हूं।http डाउनलोड फ़ाइल से फ़ाइल नाम पुनर्प्राप्त करें

असली उदाहरण के लिए मैं this file (फॉक्सिट पीडीएफ रीडर) डाउनलोड करने की कोशिश कर रहा हूं।

यदि मैं क्रोम जैसे ब्राउज़र में इस लिंक का उपयोग कर रहा हूं तो ब्राउज़र संस्करण आदि सहित सटीक नाम के साथ फ़ाइल डाउनलोड करता है। मुझे यह नाम कहां से मिलता है? मैंने हेडर सूचनाओं को पढ़ने की कोशिश की और Content-Disposition खोज रहा था लेकिन सर्वर यह जानकारी नहीं भेजता है। मुझे सटीक फ़ाइल नाम कहां से मिलता है?

try {    
    URL webfile = new URL("http://www.foxitsoftware.com/downloads/latest.php?product=Foxit-Reader"); 
    URLConnection con = webfile.openConnection(); 
    Map map = con.getHeaderFields(); 
    Set set = map.entrySet(); 
    Iterator iterator = set.iterator(); 
    while (iterator.hasNext()) { 
     System.out.println(iterator.next()); 
    } 
} catch (IOException ex) { 
    System.out.println("Error: "+ex.getMessage()); 
} 

आप उत्पादन में देख सकते हैं कोई Content-Disposition:

null=[HTTP/1.1 200 OK] 
ETag=["244005-f36d40-4d003f3868000"] 
Date=[Sat, 08 Dec 2012 12:29:02 GMT] 
Content-Length=[15953216] 
Last-Modified=[Tue, 04 Dec 2012 10:01:36 GMT] 
Content-Type=[application/x-msdos-program] 
Connection=[close] 
Accept-Ranges=[bytes] 
Server=[Apache/2.2.16 (Debian)] 

तो मैं कैसे सटीक फ़ाइल नाम प्राप्त कर सकते हैं

मैं कुछ इस तरह की कोशिश की? ब्राउज़र में लिंक FoxitReader544.11281_enu_Setup.exe नाम वाली फ़ाइल डाउनलोड करता है।

कोई विचार ?!

उत्तर

3
GET /downloads/latest.php?product=Foxit-Reader HTTP/1.1 

HTTP/1.1 302 Found

की प्रतिक्रिया देता है और सेट प्रतिक्रिया हेडर

Location: http://cdn04.foxitsoftware.com/pub/foxit/reader/desktop/win/5.x/5.4/enu/FoxitReader544.11281_enu_Setup.exe 

और अंत में, आप जारी,

GET /pub/foxit/reader/desktop/win/5.x/5.4/enu/FoxitReader544.11281_enu_Setup.exe HTTP/1.1 

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

+0

वाह! मैंने अनुमान लगाया कि 'HTTP/1.1 200 ओके' जानकारी के कारण जीईटी ठीक था ?! अगर मुझे 302 मिलना चाहिए तो मुझे 200 क्यों मिलेगा ?! पैरामीटर सेट होने पर – Marco

+3

यह स्वचालित रूप से रीडायरेक्ट का पालन करता है। देखें [** 'getFollowRedirects()' **] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#getFollowRedirects()) और [** ' setFollowRedirects() '**] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#setFollowRedirects (बूलियन)) –

+0

अच्छा! आपका बहुत बहुत धन्यवाद! स्वीकार करने के लिए 2 और मिनट इंतजार करने की आवश्यकता है ...;) – Marco

2

जब आप उपर्युक्त यूआरएल का अनुरोध करते हैं, तो सर्वर 302 पुनर्निर्देशन (हेडर कुंजी: स्थान) के साथ प्रतिक्रिया दे रहा है: http://cdn04.foxitsoftware.com/pub/foxit/reader/desktop/win/5.x/5.4/enu/FoxitReader544.11281_enu_Setup.exe और फॉक्सिट रीडर 544.11281_enu_Setup.exe फ़ाइल नाम है जो मूल लिंक पर क्लिक करते समय मेरे कंप्यूटर पर सहेजा जाता है ।

संबंधित मुद्दे