2010-12-17 10 views
4

次のコードを使用して、Graph APIを使用してFacebookに写真をアップロードしようとしています。私は "悪い要求"を取得し続けているが、理由は不明だ。私は同じパラメータでカールを使用して写真をうまくアップロードできます。私はHttpClientでJavaを使用しています。HttpClientを使用してFacebookに写真をアップロード

PostMethod filePost = new PostMethod('https://graph.facebook.com/me/photos'); 
    filePost.setParameter('access_token', 'my-access-token') 
    filePost.setParameter('message', 'test image') 

    filePost.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, false); 
    try { 
     println("Uploading " + file.getName() + " to 'https://graph.facebook.com/me/photos'"); 
     Part[] parts = [new FilePart('source', file.getName(), file)] 
     filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams())); 
     HttpClient client = new HttpClient(); 
     client.getHttpConnectionManager().getParams().setConnectionTimeout(5000); 
     int status = client.executeMethod(filePost); 
     if (status == HttpStatus.SC_OK) { 
     println(
       "Upload complete, response=" + filePost.getResponseBodyAsString() 
     ); 
     } else { 
     println(
       "Upload failed, response=" + HttpStatus.getStatusText(status) 
     ); 
     } 
    } catch (Exception ex) { 
     println("ERROR: " + ex.getClass().getName() + " " + ex.getMessage()); 
     ex.printStackTrace(); 
    } finally { 
     filePost.releaseConnection(); 
    } 

更新:これ以上。

{"error":{"type": "OAuthException"、 "message": "現在のアクセストークンを使用して現在の情報を照会する必要がありますユーザー} "}

しかし、それは私がfacebookが承認プロセスの後に私に返すアクセストークンを使用しているように右のようには思わない。カールコードの作業

curl -F 'access_token=my-access-token' -F '[email protected]/path/to/image.jpg' -F 'message=Some caption' https://graph.facebook.com/me/photos 
+0

のアンドロイド版ですか –

+0

投稿の末尾に追加 – Gregg

答えて

4

を私は問題を解決しました。 PostMethodにparamsを追加するのではなく、access_tokenとmessageをPart []配列に追加する必要がありました。完全なコード:

PostMethod filePost = new PostMethod('https://graph.facebook.com/me/photos'); 
    filePost.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, false); 
    try { 
     println("Uploading " + file.getName() + " to 'https://graph.facebook.com/me/photos'"); 
     Part[] parts = [new FilePart('source', file.getName(), file), new StringPart('access_token', "${facebookData.access_token}"), new StringPart('message', 'some message')] 
     filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams())); 
     HttpClient client = new HttpClient(); 
     client.getHttpConnectionManager().getParams().setConnectionTimeout(5000); 
     int status = client.executeMethod(filePost); 
     if (status == HttpStatus.SC_OK) { 
     println("Upload complete, response=" + filePost.getResponseBodyAsString()); 
     } else { 
     println("Upload failed, response=" + HttpStatus.getStatusText(status)); 
     // Create response 
     StringBuilder notificationsSendResponse = new StringBuilder(); 
     byte[] byteArrayNotifications = new byte[4096]; 
     for (int n; (n = filePost.getResponseBodyAsStream().read(byteArrayNotifications)) != -1;) { 
      notificationsSendResponse.append(new String(byteArrayNotifications, 0, n)); 
     } 
     String notificationInfo = notificationsSendResponse.toString(); 
     } 
    } catch (Exception ex) { 
     println("ERROR: " + ex.getClass().getName() + " " + ex.getMessage()); 
     ex.printStackTrace(); 
    } finally { 
     filePost.releaseConnection(); 
    } 
+0

私はいくつかの助けを必要とする...あなたは "ファイル"パラメータを宣言していますか? – chopss

+0

私はファイルを宣言しましたが、応答として悪い要求を表示しています............................ 'https://グラフにbird.jpgをアップロードしています.facebook.com/me/photos ' アップロードに失敗しました。レスポンス=バッドリクエスト – chopss

+0

このスレッドは4.5歳です。 APIが変更された可能性が高く、これはもはや関連性がありません。 – Gregg

1

これは、あなたもあなたの作業カールコードを追加することはできますか?方法

private void postOnFacebook() { 
     try { 
      HttpPost httpPost = new HttpPost("https://graph.facebook.com/me/photos"); 
      MultipartEntity entity = new MultipartEntity(); 
      String base64Image = "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY3gro4KMKOPLqAAAq/UdZuRmLacAAAAASUVORK5CYII="; 
      byte[] imageData = Base64.decode(base64Image, 0); 
      entity.addPart("access_token", new StringBody("your access token")); 
      entity.addPart("message", new StringBody("test msg")); 
      entity.addPart("source", new ByteArrayBody(imageData, "test")); 
      CloseableHttpClient httpclient = HttpClientBuilder.create().build(); 
      httpPost.getParams().setBooleanParameter(USE_EXPECT_CONTINUE, false); 
      httpPost.setEntity(entity); 
      HttpResponse resp = httpclient.execute(httpPost); 
      HttpEntity entity2 = resp.getEntity(); 
      if (entity != null) { 
       String responseBody = EntityUtils.toString(entity2); 
       responseBody.toString(); 
      } 
     } catch (Exception ex) { 

      ex.printStackTrace(); 
     } 
    } 
関連する問題