दिलचस्प पोस्ट
कैसे पता लगाने के लिए अगर टाइप एक अन्य सामान्य प्रकार है क्या एक्सएमएल विशेषता मूल्यों में लाइन ब्रेक की अनुमति है? मास्टर में जीआईटी शाखा को मर्ज करने के लिए सर्वश्रेष्ठ (और सबसे सुरक्षित) तरीका पांडा: श्रृंखलन कार्य समान नाम वाले एकाधिक फार्म फ़ील्ड को मान्य करने के लिए JQuery Validate Plugin का उपयोग करना स्ट्रिंग संयोजन सरणी जोड़ की तुलना में क्यों अधिक तेज होता है? मैं PHP परियोजना में अप्रयुक्त फ़ंक्शन कैसे प्राप्त करूं? HTTP त्रुटि 500.22 – आंतरिक सर्वर त्रुटि (एक asp.net सेटिंग का पता लगाया गया है जो एकीकृत प्रबंधित पाइपलाइन मोड में लागू नहीं होता है।) आवेदन कैसे करें! महत्वपूर्ण सीएसएस () का उपयोग? ऑब्जेक्ट के भीतर ऑब्जेक्ट प्रॉपर्टी एक्सेस करें फायरबेज के साथ डेटाबेस-शैली क्वेरीज़ कॉन्फ़िगर करें: त्रुटि: सी कंपाइलर निष्पादनयोग्य नहीं बना सकता बाश कमांड लाइन तक पहुंच $ $ बनाम $ $ ब्रेका और कोष्ठक के बीच स्काला में औपचारिक अंतर क्या है, और उनका उपयोग कब किया जाना चाहिए? कार्य सिंक्रनाइज़ेशन के लिए जावा एप्लिकेशन के साथ माइक्रोसॉफ्ट एक्सचेंज सर्वर को एकीकृत करने के लिए कोई एपीआई है?

एचटीटीपी पोस्ट का उपयोग करते हुए चित्र भेजना

मैं एचटीटीपी पोस्ट का इस्तेमाल करते हुए एंड्रॉइड क्लाइंट से एक छवि Django सर्वर पर भेजना चाहता हूं। छवि गैलरी से चुना गया है वर्तमान में, मैं सर्वर पर आवश्यक डेटा भेजने और JSON में जेसनॉन से प्रतिक्रिया प्राप्त करने के लिए सूची मान नाम जोड़े का उपयोग कर रहा हूं। छवियों के लिए समान दृष्टिकोण का उपयोग किया जा सकता है (जेएसओएन प्रतिक्रियाओं में एम्बेडेड छवियों के लिए यूआरएल)?

इसके अलावा, जो एक बेहतर तरीका है: छवियों को सर्वर से डाउनलोड करने या उन्हें डाउनलोड करने और उन्हें बिटमैप एरे में संग्रहीत करने और उन्हें स्थानीय रूप से उपयोग किए बिना दूरस्थ रूप से एक्सेस करना? छवियाँ संख्या में कुछ (<10) और छोटे आकार (50 * 50 डुबकी) हैं।

इन समस्याओं से निपटने के लिए कोई ट्यूटोरियल बहुत सराहना की जाएगी

संपादित करें: गैलरी से चुने गए छवियों को आवश्यक आकार में स्केल करने के बाद सर्वर को भेजा जाता है।

वेब के समाधान से एकत्रित समाधान "एचटीटीपी पोस्ट का उपयोग करते हुए चित्र भेजना"

मैं यह सोचने जा रहा हूं कि आप उस चित्र का पथ और फ़ाइल नाम जानते हैं जिसे आप अपलोड करना चाहते हैं। इस स्ट्रिंग को अपने NameValuePair image का प्रयोग कुंजी-नाम के रूप में जोड़ें।

HttpComponents पुस्तकालयों का उपयोग कर छवियां भेजी जा सकती हैं नवीनतम apache-mime4j-0.6.jar (वर्तमान में 4.0.1 ) द्विआधारी निर्भरता पैकेज के साथ डाउनलोड करें और apache-mime4j-0.6.jar और httpmime-4.0.1.jar को अपने प्रोजेक्ट में httpmime-4.0.1.jar करें और उन्हें अपने जावा बिल्ड पथ पर जोड़ें।

आपको अपनी क्लास में निम्न आयात जोड़ने की आवश्यकता होगी।

 import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; 

अब आप अपने POST अनुरोध पर एक चित्र संलग्न करने के लिए एक MultipartEntity बना सकते हैं। निम्न कोड यह कैसे दिखाता है की एक उदाहरण दिखाता है:

 public void post(String url, List<NameValuePair> nameValuePairs) { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost(url); try { MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); for(int index=0; index < nameValuePairs.size(); index++) { if(nameValuePairs.get(index).getName().equalsIgnoreCase("image")) { // If the key equals to "image", we use FileBody to transfer the data entity.addPart(nameValuePairs.get(index).getName(), new FileBody(new File (nameValuePairs.get(index).getValue()))); } else { // Normal string data entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue())); } } httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost, localContext); } catch (IOException e) { e.printStackTrace(); } } 

मुझे आशा है कि यह आपको सही दिशा में थोड़ी मदद करेगा।

संस्करण 4.3.5 अपडेटेड कोड

  • httpclient-4.3.5.jar
  • httpcore-4.3.2.jar
  • httpmime-4.3.5.jar

चूंकि MultipartEntity बहिष्कृत किया गया है कृपया नीचे दिए गए कोड देखें।

 String responseBody = "failure"; HttpClient client = new DefaultHttpClient(); client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); String url = WWPApi.URL_USERS; Map<String, String> map = new HashMap<String, String>(); map.put("user_id", String.valueOf(userId)); map.put("action", "update"); url = addQueryParams(map, url); HttpPost post = new HttpPost(url); post.addHeader("Accept", "application/json"); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setCharset(MIME.UTF8_CHARSET); if (career != null) builder.addTextBody("career", career, ContentType.create("text/plain", MIME.UTF8_CHARSET)); if (gender != null) builder.addTextBody("gender", gender, ContentType.create("text/plain", MIME.UTF8_CHARSET)); if (username != null) builder.addTextBody("username", username, ContentType.create("text/plain", MIME.UTF8_CHARSET)); if (email != null) builder.addTextBody("email", email, ContentType.create("text/plain", MIME.UTF8_CHARSET)); if (password != null) builder.addTextBody("password", password, ContentType.create("text/plain", MIME.UTF8_CHARSET)); if (country != null) builder.addTextBody("country", country, ContentType.create("text/plain", MIME.UTF8_CHARSET)); if (file != null) builder.addBinaryBody("Filedata", file, ContentType.MULTIPART_FORM_DATA, file.getName()); post.setEntity(builder.build()); try { responseBody = EntityUtils.toString(client.execute(post).getEntity(), "UTF-8"); // System.out.println("Response from Server ==> " + responseBody); JSONObject object = new JSONObject(responseBody); Boolean success = object.optBoolean("success"); String message = object.optString("error"); if (!success) { responseBody = message; } else { responseBody = "success"; } } catch (Exception e) { e.printStackTrace(); } finally { client.getConnectionManager().shutdown(); } 

इस उद्देश्य के लिए loopj लाइब्रेरी सीधे-आगे उपयोग की जा सकती है:

 SyncHttpClient client = new SyncHttpClient(); RequestParams params = new RequestParams(); params.put("text", "some string"); params.put("image", new File(imagePath)); client.post("http://example.com", params, new TextHttpResponseHandler() { @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { // error handling } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { // success } }); 

http://loopj.com/

मैं httpclient-4.3.5.jar, httpcore-4.3.2.jar, httpmime-4.3.5.jar का उपयोग करके सर्वर्सलेट करने के लिए एंड्रॉइड क्लाइंट से एक छवि पोस्ट करने की कोशिश कर रहा हूं। मुझे हमेशा एक रनटाइम त्रुटि मिली मुझे पता चला कि मूल रूप से आप Android के साथ इन जारों का उपयोग नहीं कर सकते क्योंकि गूगल एंड्रॉइड में एचटीटीपी क्लायंट का पुराना संस्करण उपयोग कर रहा है। स्पष्टीकरण यहां http://hc.apache.org/httpcomponents-client-4.3.x/android-port.html है । आपको एंड्रॉइड http-client लाइब्रेरी से httpclientandroidlib-1.2.1 jar प्राप्त करने की आवश्यकता है। फिर अपने आयात को या .apache.http.client से ch.boye.httpclientandroidlib में बदलें। उम्मीद है की यह मदद करेगा।

मैं जेडसन प्रतिक्रिया को संभालने वाले थ्रेड में आमतौर पर ऐसा करता हूं:

 try { Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageUrl).getContent()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 

यदि आपको छवि पर परिवर्तन करने की आवश्यकता है, तो आप बिटमैप के बजाय एक Drawable बनाना चाहते हैं।