Android डेवलपर ब्लॉग HttpURLConnection
अन्य उपयोग करने के लिए की तुलना में की सिफारिश है अपाचे के HttpClient
(http://android-developers.blogspot.com/2011/09/androids-http-clients.html)। मैं सलाह लेता हूं और फ़ाइल अपलोड प्रगति की रिपोर्टिंग में समस्या प्राप्त करता हूं।वहाँ किसी भी तरह से HttpUrlConncetion साथ सही ढंग से प्रगति अपलोड पाने के लिए
प्रगति हड़पने के लिए मेरी कोड इस तरह है:
try {
out = conncetion.getOutputStream();
in = new BufferedInputStream(fin);
byte[] buffer = new byte[MAX_BUFFER_SIZE];
int r;
while ((r = in.read(buffer)) != -1) {
out.write(buffer, 0, r);
bytes += r;
if (null != mListener) {
long now = System.currentTimeMillis();
if (now - lastTime >= mListener.getProgressInterval()) {
lastTime = now;
if (!mListener.onProgress(bytes, mSize)) {
break;
}
}
}
}
out.flush();
} finally {
closeSilently(in);
closeSilently(out);
}
इस कोड excutes जो कुछ फ़ाइल आकार के लिए बहुत तेजी से है, लेकिन फ़ाइल वास्तव में अभी भी सर्वर पर अपलोड किया गया है util मैं सर्वर से प्रतिक्रिया मिलता है। ऐसा लगता है कि HttpURLConnection
आंतरिक बफर में सभी डेटा कैश करता है जब मैं out.write()
पर कॉल करता हूं।
तो, मैं वास्तविक फ़ाइल अपलोड प्रगति कैसे प्राप्त कर सकता हूं? ऐसा लगता है कि httpclient
ऐसा कर सकता है, लेकिन httpclient
पसंद नहीं किया गया है ... कोई विचार?
आपको समझदार डेवलपर्स में से एक होने के लिए अपाचे के क्लाइंट का उपयोग न करने के लिए एक शानदार अद्भुत +1 मिलता है। एंड्रॉइड में सबसे खराब नेटवर्किंग फैसले इस साइट पर अपाचे क्लाइंट के नाम पर देखे गए हैं। दूसरा, आम तौर पर प्रगति एक बड़ी फाइल अपलोड करने के लिए प्रासंगिक है। आपकी फाइल कितनी बड़ी है? यदि हां, तो आपकी फ़ाइल के लिए उपयुक्त स्थानांतरण एन्कोडिंग है? – Tom
@Tom मेरे ऐप को अपलोड करने वाली फ़ाइल को 30 मीटर से बड़ा नहीं करने की आवश्यकता है, और सर्वर पक्ष अब खंडित ट्रांसफर एन्कोडिंग का समर्थन नहीं करता है ... – toki
@ टोकी यह पुराना है, लेकिन यदि आप सोच रहे थे कि आपको लाइन 2 में गलत वर्तनी कनेक्शन है। – charliebeckwith