5

मैं फेसबुक पर एक फोटो (एपेंगेन डीबी में संग्रहीत) पोस्ट करना चाहता हूं।जीएई/जे: मैं एपेंगिन से फेसबुक पर एक मल्टीपार्ट एमआईएम संदेश कैसे पोस्ट करूं

परीक्षण करने के लिए मैं बुनियादी समझ मिल गया है नीचे स्थानीय स्तर पर: मैं सफल इस फार्म के साथ किया गया है: (। मैं हाल ही में एक सत्र से ACCESS_TOKEN पकड़ा इस काम करने के लिए)

<form action="https://graph.facebook.com/7378294228/photos?access_token=AAAAAJPBSAzcBALmz7GOLZCER7Pc2347WQIDIlIFR8e2imWUzeuCKRLrXjAqR6zjaUb4laqkLtJlQlYa7X5ZBd2aNJoLom8M7IlvHfw39QZDZD" method="POST" enctype="multipart/form-data"> 
<input type="file" name="source" id="source"/> 
<input type="text" name="message" value="mymess"/> 
<input type="Submit"/> 
</form> 

यहाँ है कि मैं क्या appengine असफल अब तक पर की कोशिश की है:

MultipartEntity mpEntity = new MultipartEntity(); 
ContentBody cbFile = new ByteArrayBody(imageBytes, "image/jpeg", "w.jpg"); 
mpEntity.addPart("source", cbFile); 

URL url = new URL("https://graph.facebook.com/"+albumUpload.getAlbumID()+"/photos?access_token="+albumUpload.getAuthToken());     
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
connection.setDoOutput(true); 
connection.setRequestMethod("POST"); 

mpEntity.writeTo(connection.getOutputStream()); 

if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
    System.err.println("http success!"); 
}else{ 
    System.err.println("http failed:"+connection.getResponseCode()); 
} 

मुझे एक HTTP 400 - खराब अनुरोध मिलता है। ,

mpEntity image content length: 786145 
mpEntity content type:Content-Type: multipart/form-data; boundary=oMiJCBHGVvZmU7s3FcUGXMbyU23aX_Ow 

केवल उदाहरण मैं ऑनलाइन MultipartEntity उपयोग के पा सकते हैं HttpClient के setEntity() का उपयोग कर रहे हैं:

System.out.println("mpEntity image content length: "+cbFile.getContentLength()); 
System.out.println("mpEntity content type:"+mpEntity.getContentType()); 

जिसमें परिणाम:

मैं इन यकीन है कि यह कुछ कर रहा था बनाने के लिए जोड़ा जैसा कि इस तरह लागू नहीं होता है क्योंकि यह एपेंगिन के तहत एक यूआरएलफ़ेच है।

किसी भी मदद/कोड के लिए धन्यवाद।

उत्तर

10

हल हो गया!

मैं जोड़ने के लिए की जरूरत:

connection.addRequestProperty("Content-length", mpEntity.getContentLength()+""); 
connection.addRequestProperty(mpEntity.getContentType().getName(), mpEntity.getContentType().getValue()); 

भी बदल दिया है:

MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

आशा इस मदद करता है किसी को

+0

धन्यवाद, @abramcat। तुमने मुझे बहुत मदद की। जीएई से इस पोस्टिंग बहु-भाग को आजमाने में 1.5 दिन लग गए। – payliu

+0

धन्यवाद abramcat करने के लिए भी, आपका दस्तावेज मेरे लिए एक बड़ा समर्थन रहा है। बहुत ज्यादा अधिमूल्यित ! बस आश्चर्य कीजिए कि फाइल अपलोड जैसे "बुनियादी" चीजें इतनी जटिल और इतनी खराब दस्तावेज क्यों होनी चाहिए। – Hugues

+0

आपको यह जवाब स्वीकार करना चाहिए। – Gray

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