5

Chcę zamieścić zdjęcie (przechowywane w appengine db) na Facebooku.GAE/J: W JAKI SPOSÓB ZOSTAĆ POST MARTOWYM WIADOMEM Z APPENGINE DO FACEBOOKA

Aby przetestować Mam podstawową wiedzę w dół lokalnie: Byłem udany z tego formularza: (. Złapałam access_token od ostatniej sesji do tej pracy)

<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> 

Oto co próbowałem na AppEngine bezskutecznie dotąd:

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()); 
} 

Otrzymuję HTTP 400 - nieprawidłowe żądanie.

dodałam je, aby upewnić się, że robił coś:

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

co skutkuje:

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

Jedyne przykłady znajdę użytkowania MultipartEntity Internecie korzysta httpclient na setEntity(), jako takie nie mają zastosowania, ponieważ jest to URLFetch w ramach aplikacji.

Dzięki za pomoc/kod.

Odpowiedz

10

Rozwiązany!

Musiałem dodać:

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

zmienił również:

MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

Nadzieja to pomaga komuś

+0

Dzięki, @abramcat. Dałeś mi wielką pomoc. Wziąłem 1,5 dnia na wypróbowanie tego wieloczęściowego ogłoszenia z GAE. – payliu

+0

Dziękuję również abramcat, twoja dokumentacja była dla mnie wspaniałym wsparciem. Bardzo doceniane! Zastanawiam się tylko, dlaczego "podstawowe" rzeczy, takie jak przesyłanie plików, muszą być tak skomplikowane i tak słabo udokumentowane. – Hugues

+0

Powinieneś przyjąć tę odpowiedź. – Gray

Powiązane problemy