2010-12-17 5 views
4

다음 코드를 사용하여 Graph API를 사용하여 Facebook에 사진을 업로드하려고합니다. 나는 "나쁜 요청"을 계속 받고 있지만 확실하지는 않습니다. 동일한 매개 변수를 사용하여 컬을 사용하여 사진을 업로드 할 수 있습니다. Java를 HttpClient와 함께 사용하고 있습니다.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": "현재 액세스 토큰은 현재 사용자} "}

하지만 페이스 북이 권한 부여 프로세스 후에 나에게 제공하는 액세스 토큰을 사용하고있는 것처럼 보이지 않습니다.

컬 코드를 사용 :

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에 매개 변수를 추가하는 대신 Access_token 및 메시지를 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

내가 어떤 도움을 nneed ... 당신은 "파일"매개 변수를 선언합니까? – 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(); 
     } 
    }