5

我想發佈一張照片(存儲在appengine db)到facebook。GAE/J:如何從appengine發佈多部分MIME郵件到facebook

爲了測試我已經得到了基本的瞭解下當地:我已經成功這種形式:(我抓住了從的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 - 錯誤的請求。

我說這些,以確保它在做什麼:

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

導致:

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

唯一的例子我能找到MultipartEntity使用的在線使用的HttpClient的setEntity()因爲這是不適用的,因爲這是在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。你給了我很大的幫助。我花了1.5天的時間嘗試從GAE發佈多部分內容。 – payliu

+0

也感謝abramcat,你的文檔對我來說是一個很好的支持。非常感謝 !只是想知道爲什麼諸如文件上傳之類的「基本」事情必須如此複雜且記錄不完整。 – Hugues

+0

你應該接受這個答案。 – Gray

相關問題