2012-04-19 9 views
7

मैं apache HttpClient से पोस्ट सर्वर पर कई फ़ाइलों का उपयोग कर रहा हूं।HTTP बहुआयामी और coexist chunking कर सकते हैं?

public static HttpResponse stringResponsePost(String urlString, String content, byte[] image, 
     HttpContext localContext, HttpClient httpclient) throws Exception { 

    URL url = new URL(URLDecoder.decode(urlString, "utf-8")); 
    URI u = url.toURI(); 

    HttpPost post = new HttpPost(); 
    post.setURI(u); 

    MultipartEntity reqEntity = new MultipartEntity(); 
    StringBody sb = new StringBody(content, HTTP_CONTENT_TYPE_JSON, Charset.forName("UTF-8")); 
    ByteArrayBody ib = new ByteArrayBody(image, HTTP_CONTENT_TYPE_JPEG, "image"); 

    reqEntity.addPart("interview_data", sb); 
    reqEntity.addPart("interview_image", ib); 
    post.setEntity(reqEntity); 

    HttpResponse response = null; 
    response = httpclient.execute(post, localContext); 

    return response; 
} 

समस्या है, MultipartEntity वर्ग केवल isChunked() विधि (जो हमेशा झूठे रिटर्न) है, वहाँ कोई "setChunked (बुलियन)" है विकल्प होगा यदि मैं अपना बहुखण्डीय इकाई के लिए chucked एन्कोडिंग सक्षम करना चाहते हैं: यहाँ कोड है।

मेरा प्रश्न है:

  1. प्रोटोकॉल विनिर्देश के अनुसार बहुखण्डीय और बेडौल समय में होना http कर सकते हैं? यदि नहीं, तो InputStreamEntity वर्ग जैसी अन्य संस्थाओं में setChunked(boolean) है जहां MultipartEntity नहीं है?

  2. क्या चंकिंग सक्षम के साथ कई बार "एक बार" पोस्ट करने का कोई तरीका है, अधिकांशतः अपाचे लाइब्रेरी के साथ?

उत्तर

8

मेरे दूसरे प्रश्न के लिए एक समाधान मिल गया, चाल, एक ByteArrayOutputStream को MultipartEntity लिखने ByteArrayOutputStream से एक ByteArrayEntity बना सकते हैं और उस पर बेडौल सक्षम बनाना है। यहां कोड है:

ByteArrayOutputStream bArrOS = new ByteArrayOutputStream(); 
    // reqEntity is the MultipartEntity instance 
    reqEntity.writeTo(bArrOS); 
    bArrOS.flush(); 
    ByteArrayEntity bArrEntity = new ByteArrayEntity(bArrOS.toByteArray()); 
    bArrOS.close(); 

    bArrEntity.setChunked(true); 
    bArrEntity.setContentEncoding(reqEntity.getContentEncoding()); 
    bArrEntity.setContentType(reqEntity.getContentType()); 

    // Set ByteArrayEntity to HttpPost 
    post.setEntity(bArrEntity); 
संबंधित मुद्दे