मुझे एंड्रॉइड में छवियों को अपलोड करने में समस्याएं आ रही हैं।एंड्रॉइड httpclient फ़ाइल अपलोड डेटा भ्रष्टाचार और टाइमआउट मुद्दे
मैं अपाचे httpmime 4.1 का उपयोग कर रहा कोड lib इस तरह है:
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("image", new FileBody(new File(AndorraApplication.getPhotosPath() + "/" + entity.getFileName()), "image/jpeg"));
resp = NetworkUtils.sendHttpRequestMultipart(EXPORT_PHOTOS_URI, reqEntity);
NetworkUtils वर्ग:
public class NetworkUtils {
public static final int REGISTRATION_TIMEOUT = 3 * 1000;
public static final int WAIT_TIMEOUT = 5 * 1000;
public static HttpResponse sendHttpRequestMultipart(String uri, MultipartEntity entity) {
HttpClient mHttpClient = new DefaultHttpClient();
final HttpParams params = mHttpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, REGISTRATION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);
ConnManagerParams.setTimeout(params, WAIT_TIMEOUT);
HttpPost post = new HttpPost(uri);
post.addHeader(entity.getContentType());
post.setEntity(entity);
HttpResponse resp = mHttpClient.execute(post);
}
}
कभी कभी सब कुछ ठीक काम करता है, लेकिन कभी कभी (विशेष रूप से धीमे कनेक्शन पर) छवि बहुत दूषित अपलोड की गई है। उदाहरण यहां है: http://pixelbirthcloud.com/574_orig.jpg
यह कोई अपवाद नहीं फेंकता है। अपलोड की गई फ़ाइल की लंबाई मूल के समान ही है .. माइम प्रकार को एप्लिकेशन/ऑक्टेट-स्ट्रीम में बदलने या इसे हटाने की कोशिश की गई। टाइमआउट के साथ खेलना कोशिश करता है। अभी भी एक ही परिणाम। अंतिम उपयोगकर्ता भ्रष्ट छवियों को लगभग हर समय अपलोड करते हैं (हालांकि मैं केवल ब्रोनम छवियों को केवल 2 बार प्राप्त करने में कामयाब रहा हूं) .. छवि का आकार पहले 2.5 मेग्स था, लेकिन फिर मैंने इसे 500-700 केबी तक घटा दिया। हालांकि समस्या को ठीक नहीं किया।
ने अपाचे की लाइब्रेरी को बदलने की कोशिश नहीं की है .. शायद यह समस्या है .. लेकिन जहां तक मैंने नेट पढ़ा, कोई भी httpmime लाइब्रेरी के साथ इसका अनुभव नहीं कर रहा था।
यह क्या हो सकता है? मैं पूरी तरह से जब यह इस लाइन के लिए आता है की तरह अब खो रहा हूँ :(
अन्य मुद्दा है कि समय समाप्ति कभी कभी काम नहीं कर रहा
:। HttpResponse resp = mHttpClient.execute (पोस्ट); और मैं 3g को निष्क्रिय कनेक्शन यह सिर्फ तरह के लिए के बजाय 17-20 मिनट 3 या 5 सेकंड इंतजार कर रहा है .. और उसके बाद ही अपवाद फेंकता विभिन्न तरीकों की कोशिश की इस तरह:।।
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpProtocolParams.setUseExpectContinue(params, false);
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
ConnManagerParams.setMaxTotalConnections(params, 5);
ConnManagerParams.setTimeout(params, 30000);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https",PlainSocketFactory.getSocketFactory(), 80));
ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);
HttpClient httpclient = new DefaultHttpClient(manager, params);
लेकिन अभी भी काम नहीं करता है :)
आपके द्वारा मारा जाने वाला ऑनलाइन स्क्रिप्ट फ़ाइल को पढ़ने और डेटाबेस पर सहेजने के लिए कोड होना चाहिए – Javanator
ऐसा कुछ ऐसा करने का अंत हो सकता है जो मुझे लगता है ... हालांकि इसने सवाल का जवाब नहीं दिया, लेकिन धन्यवाद .. इस तरह के समाधान को देखा नेट पर पहले, लेकिन एक और सुविधाजनक तरीका जाने का फैसला किया - httpcomponents का उपयोग कर .. लेकिन किसी कारण से असफल रहा :( – Alex
यह एक पूर्ण वर्ग है जिसे हमें केवल फाइल यूआरएल और स्क्रिप्ट के यूआरएल को पास करने की आवश्यकता है। फिर और अधिक सुविधाजनक क्या होगा यह – Javanator