2011-01-18 16 views
12

मैं Apache httpclient 4. उपयोग कर रहा हूँ मैं इस तरह बहुत सामान्य बहुखण्डीय सामान कर रहा हूँ:मैं मल्टीपार्टफॉर्म अनुरोध की सामग्री कैसे देख सकता हूं?

val entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
entity.addPart("filename", new FileBody(new File(fileName), "application/zip").asInstanceOf[ContentBody]) 
entity.addPart("shared", new StringBody(sharedValue, "text/plain", Charset.forName("UTF-8"))); 

val post = new HttpPost(uploadUrl); 
post.setEntity(entity); 

मैं इकाई की सामग्रियों (या पोस्ट, जो कुछ भी) इससे पहले कि मैं इसे भेजने देखना चाहते हैं। हालांकि, उस विशिष्ट विधि को लागू नहीं किया गया है:

entity.getContent() // not defined for MultipartEntity 

मैं कैसे देख सकता हूं कि मैं क्या पोस्ट कर रहा हूं?

+0

org.apache.http.entity.mime.MultipartEntity कोशिश कर सकते हैं - http - प्रलेखन से getContent() शामिल हैं: //hc.apache .org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/multipartEntity.html –

+4

हाँ, और यह फ़ंक्शन लागू नहीं किया गया है। यह आपको एक NotImplementedException – asdasd

उत्तर

0

क्या आप सामग्री को नहीं जानते? हालांकि, आप sharedValue की आपूर्ति करके StringBody बना रहे हैं। तो, यह sharedValue से अलग कैसे हो सकता है।

+2

देगा क्योंकि पूर्ण मल्टीपार्ट फ़ॉर्म अनुरोध स्ट्रिंग बॉडी सामग्री के योग से अलग है। डेटा के लिए टेरेस रैपर, और मैं उन सभी को – asdasd

+1

देखना चाहता हूं इसके लिए एक और सामान्य उपयोग केस है: स्वचालित लॉगिंग। मैं इस सवाल पर आया क्योंकि मैं 'HttpRequestBase' को एक लॉगिंग इंफ्रास्ट्रक्चर को भेजकर प्रत्येक बातचीत को लॉग करता हूं जो 'HttpEntity' (अगर मौजूदा) इत्यादि निकालता है और इसे लॉग करता है। –

16

उपयोग org.apache.http.entity.mime.MultipartEntitywriteTo(java.io.OutputStream) विधि एक java.io.OutputStream करने के लिए सामग्री लिखने के लिए, और उसके बाद करने के लिए एक String या byte[] कि धारा परिवर्तित:

// import java.io.ByteArrayOutputStream; 
// import org.apache.http.entity.mime.MultipartEntity; 
// ... 
// MultipartEntity entity = ...; 
// ... 

ByteArrayOutputStream out = new ByteArrayOutputStream(entity.getContentLength()); 

// write content to stream 
entity.writeTo(out); 

// either convert stream to string 
String string = out.toString(); 

// or convert stream to bytes 
byte[] bytes = out.toByteArray(); 

नोट: बहुखण्डीय संस्थाओं दोनों 2GB से छोटे, अधिक से अधिक के लिए यह केवल काम करता है जावा में बाइट सरणी का आकार, और स्मृति में पढ़ने के लिए काफी छोटा है।

0

मैं कोड का पालन करते हुए मल्टीपार्ट अनुरोध मुद्रित है, आप की तरह

ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 

entity.writeTo(bytes); 

String content = bytes.toString(); 

Log.e("MultiPartEntityRequest:",content); 
+0

यह वास्तव में मौजूदा उत्तरों, विशेष रूप से [स्वीकृत उत्तर] (http://stackoverflow.com/a/10408206) से अधिक जानकारी नहीं जोड़ता है। –

+0

यह आंखों पर अधिक पठनीय और आसान था। जब आप समझने में जल्दी में होते हैं तो संक्षेप में पढ़ा जाने वाला कोड विशेष रूप से कड़ी मेहनत करने के लिए सराहना करता है। – killjoy

संबंधित मुद्दे