5

Facebookに保存されている写真(appengine dbに保存されています)を投稿したいと思います。私はこのフォームで成功してきた:GAE/J:appengineからfacebookにマルチパートMIMEメッセージを投稿するには

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

(私はこの仕事をするために、最近のセッションからaccess_tokenはをつかんだ。)

私がダウンしてローカルに基本的な理解を持ってテストするには

ここで

は、私がこれまでに失敗したの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 - Bad Requestを取得します。

私はそれが何かをやっていたことを確認するためにこれらを追加しました:、私はMultipartEntity利用オンラインで見つけることができる唯一の例は、(のHttpClientのsetEntityを使用している

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

):

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

になりこのように適用されないのは、appengineの下のURLFetchです。

ヘルプ/コードありがとうございます。

答えて

10

解決済み!

私は追加する必要:

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

も変更:

MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

・ホープこれは誰か

+0

おかげで、@abramcatに役立ちます。あなたは私に大きな助けをした。 GAEから投稿するこのマルチパートを試してみるのに1.5日かかりました。 – payliu

+0

abramcatもありがとうございます。あなたのドキュメントは私にとって大きな支持をしてくれました。非常に高く評価 !なぜ、ファイルのアップロードなどの「基本的な」ものが非常に複雑で文書化されていなければならないのか不思議です。 – Hugues

+0

この回答に同意する必要があります。 – Gray

関連する問題