में यूआरएल से फ़ाइल आकार की गणना कैसे करें मैं वेब सेवा से पीडीएफ लिंक का एक समूह प्राप्त करने का प्रयास कर रहा हूं और मैं उपयोगकर्ता को प्रत्येक लिंक का फ़ाइल आकार देना चाहता हूं।जावा
क्या इस कार्य को पूरा करने का कोई तरीका है?
धन्यवाद
में यूआरएल से फ़ाइल आकार की गणना कैसे करें मैं वेब सेवा से पीडीएफ लिंक का एक समूह प्राप्त करने का प्रयास कर रहा हूं और मैं उपयोगकर्ता को प्रत्येक लिंक का फ़ाइल आकार देना चाहता हूं।जावा
क्या इस कार्य को पूरा करने का कोई तरीका है?
धन्यवाद
एक HEAD अनुरोध का उपयोग करना, आप कुछ इस तरह कर सकते हैं:
private static int getFileSize(URL url) {
URLConnection conn = null;
try {
conn = url.openConnection();
if(conn instanceof HttpURLConnection) {
((HttpURLConnection)conn).setRequestMethod("HEAD");
}
conn.getInputStream();
return conn.getContentLength();
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if(conn instanceof HttpURLConnection) {
((HttpURLConnection)conn).disconnect();
}
}
}
मौजूद नहीं हो सकता है मुझे नीचे अपवाद मिला: java.io.IOException: सर्वर ने HTTP प्रतिक्रिया कोड लौटाया: URL के लिए 405। मैं ब्राउज़र में पीडीएफ लिंक खोलने के लिए ablo हूँ। क्या इसका मतलब यह है कि यह यूआरएल सिर अनुरोध की अनुमति नहीं देगा? – javaMan
क्या आप अपना अनुरोध यूआरएल साझा कर सकते हैं? –
मुझे खेद है ... यूआरएल को मेरे प्रमाण पत्र की आवश्यकता है। मैं इसे साझा नहीं कर सकता। :( – javaMan
HTTP HEAD विधि का उपयोग करने का प्रयास करें। यह केवल HTTP शीर्षलेख देता है। शीर्षलेख Content-Length
में आपकी आवश्यक जानकारी होनी चाहिए।
क्या आपने यूआरएल कनेक्शन पर getContentLength का उपयोग करने के लिए पहले से ही प्रयास किया है? यदि सर्वर एक वैध शीर्षलेख का जवाब देता है तो आपको दस्तावेज़ का आकार प्राप्त करना चाहिए।
लेकिन इस तथ्य से अवगत रहें कि वेबसर्वर भी फाइलों को फाइलों में वापस कर सकता है। इस मामले में आईआईआरसी सामग्री लंबाई विधि या तो एक खंड (< = 1.4) या -1 (> 1.4) के आकार को वापस कर देगी।
HTTP प्रतिक्रिया, एक सामग्री-लंबाई हेडर है तो आप इस मूल्य के लिए URLConnection वस्तु क्वेरी सकता है।
एक बार यूआरएल कनेक्शन खोल दिया गया है, तो आप कुछ इस तरह की कोशिश कर सकते हैं:
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...
...
}
}
आप इस कोशिश कर सकते हैं ..
private long getContentLength(HttpURLConnection conn) {
String transferEncoding = conn.getHeaderField("Transfer-Encoding");
if (transferEncoding == null || transferEncoding.equalsIgnoreCase("chunked")) {
return conn.getHeaderFieldInt("Content-Length", -1);
} else {
return -1;
}
स्वीकार किए जाते हैं जवाब, NullPointerException
की संभावना है नहीं है फाइलों के लिए काम> 2 जीआईबी और getInputStream()
पर एक अनावश्यक कॉल शामिल है। यहां तय कोड है:
public long getFileSize(URL url) {
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("HEAD");
return conn.getContentLengthLong();
} catch (IOException e) {
return -1;
// Or wrap into a (custom, if desired) RuntimeException so exceptions are propagated.
// throw new RuntimeException(e);
// Alternatively you can just propagate IOException, but, urgh.
} finally {
if (conn != null) {
conn.disconnect();
}
}
}
मुझे डर है कि आपको सटीक आकार प्राप्त करने के लिए कम से कम एक बार फ़ाइल डाउनलोड करनी होगी। (आप भविष्य के लिए स्टोर करना चाहते हैं, लेकिन यदि सर्वर पर फ़ाइलें बदलती हैं तो डेटा बाँध जाएगा) – Nishant
@ निशांत यह सच नहीं है। एक 'HTTP HEAD' अनुरोध आपको 'HTTP GET' अनुरोध करने पर प्राप्त होने के बारे में जानकारी देता है, जिसमें लौटाए गए अनुरोध का आकार शामिल होना चाहिए। आप निश्चित रूप से 'हेड' अनुरोध कर सकते हैं और प्रतिक्रिया का विश्लेषण कर सकते हैं। – Thor84no
आह, ठीक है। जानकर अच्छा लगा। धन्यवाद @ Thor84no – Nishant