मैं स्कूल के लिए एक परियोजना पर काम कर रहा हूं, और मैं एक उपकरण लागू कर रहा हूं जिसका उपयोग वेब से फ़ाइलों को डाउनलोड करने के लिए किया जा सकता है (थ्रॉटलिंग विकल्प के साथ)। बात यह है कि, मेरे पास इसके लिए एक जीयूआई होगा, और मैं JProgressBar
विजेट का उपयोग करूँगा, जिसे मैं डाउनलोड की वर्तमान प्रगति दिखाना चाहता हूं। इसके लिए मुझे फ़ाइल के आकार को जानना होगा। फ़ाइल डाउनलोड करने से पहले फ़ाइल का आकार कैसे प्राप्त करें।जावा यूआरएल कनेक्शन: मैं वेब फ़ाइल का आकार कैसे ढूंढ सकता हूं?
उत्तर
कोई भी HTTP प्रतिक्रिया सामग्री-लंबाई शीर्षलेख रखने के लिए है, ताकि आप इस मान के लिए URLConnection ऑब्जेक्ट से पूछ सकें।
//once the connection has been opened
List values = urlConnection.getHeaderFields().get("content-Length")
if (values != null && !values.isEmpty()) {
// getHeaderFields() returns a Map with key=(String) header
// name, value = List of String values for that header field.
// just use the first value here.
String sLength = (String) values.get(0);
if (sLength != null) {
//parse the length into an integer...
...
}
यह हमेशा संभव नहीं हो सकता एक सर्वर एक सटीक सामग्री-लंबाई वापस जाने के लिए के लिए है, तो मूल्य गलत हो सकती हैं, लेकिन कम से कम आप कुछ प्रयोग करने योग्य मूल्य समय के सबसे अधिक मिलेगा।
अपडेट: या, अब मैं URLConnection javadoc को पूरी तरह से देखता हूं, तो आप केवल getContentLength() विधि का उपयोग कर सकते हैं।
आप सामग्री की लंबाई (URLConnection.getContentLength()) का उपयोग करना चाहेंगे। दुर्भाग्यवश, यह हमेशा सटीक नहीं होगा, या हमेशा प्रदान नहीं किया जा सकता है, इसलिए इस पर भरोसा करना हमेशा सुरक्षित नहीं होता है।
जैसा कि बताया गया है, URLConnection की getContentLength आपकी सबसे अच्छी शर्त है, लेकिन यह हमेशा एक निश्चित लंबाई नहीं देगी। ऐसा इसलिए है क्योंकि HTTP प्रोटोकॉल (और अन्य जिन्हें URLConnection द्वारा दर्शाया जा सकता है) हमेशा लंबाई को व्यक्त नहीं करते हैं।
HTTP के मामले में, गतिशील सामग्री की लंबाई आमतौर पर — में ज्ञात नहीं है जब content-length
हेडर सामान्य रूप से भेजा जाएगा। इसके बजाए, एक और शीर्षलेख, transfer-coding
, निर्दिष्ट करता है कि "खंडित" एन्कोडिंग का उपयोग किया जाता है। खंडित एन्कोडिंग के साथ, संपूर्ण प्रतिक्रिया की लंबाई निर्दिष्ट नहीं है, और प्रतिक्रिया वापस टुकड़ों में भेजी जाती है, जहां प्रत्येक टुकड़े का आकार निर्दिष्ट होता है। अभ्यास में, सर्वर सर्वलेट से आउटपुट बफर करता है। जब भी बफर भर जाता है, एक और हिस्सा भेजा जाता है। इस तंत्र का उपयोग करके, HTTP असीमित लंबाई की प्रतिक्रिया स्ट्रीमिंग शुरू कर सकता है।
URLConnection के माध्यम से फ़ाइल की लंबाई प्राप्त करने में सक्षम नहीं होने का एक अन्य कारण यह है कि फ़ाइल 2 जीबी से बड़ी है, जो एक सकारात्मक पूर्णांक की सीमा है।
+1। J2SE 1.4 रिटर्न -1 यदि आप URL कनेक्शन कनेक्शन पर सामग्री लंबाई को एक खंडित प्रतिक्रिया के लिए पढ़ते हैं। यह जे 2 एसई 1.3 में मामला नहीं था। –
जैसा कि @ एरिक्सन ने कहा था, कभी-कभी "सामग्री-लंबाई:" के बजाय शीर्षलेख "स्थानांतरण-एन्कोडिंग: खंडित" होता है और निश्चित रूप से आपके पास लंबाई के लिए शून्य मान होता है।
उपलब्ध() विधि के बारे में - कोई भी आपको गारंटी नहीं दे सकता कि यह उचित मूल्य वापस कर देगा, इसलिए मैं आपको इसका उपयोग करने की सलाह नहीं देता हूं।
एक हेड अनुरोध का उपयोग करके, मुझे अपना वेबसर्वर सही सामग्री-लंबाई फ़ील्ड के उत्तर देने के लिए मिला जो अन्यथा खाली था। मैं अगर यह सामान्य रूप में काम करता है लेकिन मेरे मामले में यह होता है पता नहीं है:
private int tryGetFileSize(URL url) {
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("HEAD");
conn.getInputStream();
return conn.getContentLength();
} catch (IOException e) {
return -1;
} finally {
conn.disconnect();
}
}
मेरे लिए बहुत अच्छा काम करता है, बहुत बहुत धन्यवाद। – z00l
//URLConnection connection
private int FileSize(String url) {
// this is the method and it get the url as a parameter.
// this java class will allow us to get the size of the file.
URLConnection con;
// its in a try and catch incase the url given is wrong or invalid
try{
// we open the stream
con = new URL(url).openConnection()
return con.getContentLength();
}catch (Exception e){
e.printStackTrace();
// this is returned if the connection went invalid or failed.
return 0;
}
}
कृपया कोड के ऊपर एक विवरण पोस्ट करें जो आपने समझाया –
कृपया अधिक जानकारी के साथ संपादित करें। केवल कोड और "इसे आज़माएं" उत्तर निराश हैं, क्योंकि उनमें कोई खोज योग्य सामग्री नहीं है, और यह समझाएं कि किसी को "इसे आजमाएं" क्यों चाहिए। हम ज्ञान के लिए संसाधन बनने के लिए यहां एक प्रयास करते हैं। – abarisone
यह संपादित, मैंने इसे खत्म कर दिया। –
- 1. मैं एप्लिकेशन का बेस यूआरएल कैसे ढूंढ सकता हूं?
- 2. मैं जावा में यूआरएल से छवि कैसे पढ़ सकता हूं?
- 3. मैं एंड्रॉइड पर एसिंक्रोनस यूआरएल कनेक्शन कैसे बना सकता हूं?
- 4. मैं ऑब्जेक्ट का केंद्र कैसे ढूंढ सकता हूं?
- 5. कुकीज जावा यूआरएल कनेक्शन
- 6. मैं यूनिक्स प्रक्रिया को कैसे ढूंढ सकता हूं जो स्थानीय स्लीपिंग MySQL कनेक्शन का मालिक है?
- 7. मैं जावा वेब एप्लिकेशन संकलन को कैसे बढ़ा सकता हूं?
- 8. मैं एक बटन का आकार कैसे सेट कर सकता हूं?
- 9. मैं 2 डी पॉइंट क्लाउड के अल्फा आकार (अवतल हल) कैसे ढूंढ सकता हूं?
- 10. मैं cmd से वर्तमान विंडोज भाषा कैसे ढूंढ सकता हूं?
- 11. मैं HTML स्निपेट में टेक्स्ट नोड्स कैसे ढूंढ सकता हूं?
- 12. मैं मॉडल के रिश्तों को कैसे ढूंढ सकता हूं?
- 13. मैं उन तत्वों को कैसे ढूंढ सकता हूं जिनमें jquery
- 14. मैं AJAX ऐप में अप्रयुक्त सीएसएस कैसे ढूंढ सकता हूं?
- 15. मैं संग्रहित प्रक्रिया कॉल कैसे ढूंढ सकता हूं?
- 16. मैं वर्तमान DNS सर्वर कैसे ढूंढ सकता हूं?
- 17. मैं कॉर्पस से केवल 'रोचक' शब्द कैसे ढूंढ सकता हूं?
- 18. मैं जावा में कैसे जुड़ सकता हूं?
- 19. शेयरपॉइंट: मैं एक विशेष वेब भाग होस्ट करने वाले सभी पृष्ठों को कैसे ढूंढ सकता हूं?
- 20. मैं जावास्क्रिप्ट में Shift + key को कैसे ढूंढ सकता हूं?
- 21. मैं सबसे महंगी क्वेरी कैसे लॉग और ढूंढ सकता हूं?
- 22. मैं WordPress पर अपना php.ini कैसे ढूंढ सकता हूं?
- 23. मैं 1-बार ई-क्रेडिट कार्ड कैसे ढूंढ सकता हूं?
- 24. मैं फ़्यूज़न पैसेंजर संस्करण कैसे ढूंढ सकता हूं?
- 25. जावा: यूआरएल कनेक्शन में डाउनलोड करें
- 26. मैं जावा ईई कंटेनर में एलडीएपी कनेक्शन पूल कैसे स्थापित कर सकता हूं?
- 27. मैं जावा में स्थानीय HTTPS यूआरएल का उपयोग कैसे करूं?
- 28. मैं अपने यूआरएल से "सीजीआई-बिन" कैसे हटा सकता हूं?
- 29. सी # में, मैं अपने web.config फ़ाइल कनेक्शन स्ट्रिंग में संग्रहीत कनेक्शन स्ट्रिंग कैसे पढ़ सकता हूं?
- 30. मैं JTabbedPane टैब का आकार कैसे बदल सकता हूं?
getContentLength() लिंक नहीं मिला पेज देता है, http://docs.oracle.com/javase/6/ देखना दस्तावेज़/एपीआई/जावा/नेट/URLConnection.html # getContentLength() – Reg
getContentLength हमेशा एक मान वापस नहीं करेगा। उदाहरण के लिए, एक ऐसा अनुरोध करते समय जो एक गतिशील परिणाम देता है जहां सामग्री का आकार पहले से ज्ञात नहीं है। सटीकता के लिए – coderama