2013-04-12 3 views
1

Google 드라이브 REST API와 HTTPClient를 사용하여 폴더를 만듭니다. REST API는 문서 here입니다. REST AP 요청이 실행되지만 잘못된 데이터를 사용합니다. tt는 "untitled"라는 새 파일을 만들고 거기에 json을 넣습니다.Google 드라이브 REST AP 및 HTTP 클라이언트로 폴더를 만드는 방법은 무엇인가요?

성공적으로 실행되는 HTTPClient를 사용하여 POST 요청을 작성하는 여러 가지 방법을 시도했지만 어떻게 든 Google 드라이브가 파일 생성에 응답하고이 데이터를 반환하고 제출 한 POST 데이터를 무시합니다.

에 .. 서버가
와 reponds 것입니다

"종류": "드라이브 # 파일", "ID": "0B-fYJN-c4UDjUlh1TUZadF9vejA"이 "제목 유효한 ID 입니다 ":"mimeType를 "---- 잘못된 제목 ,"제목 없음 ":"응용 프로그램/JSON = UTF-8 ", 캐릭터 세트 -이 잘못된 mimeType를 입니다 ..

나는 다음과 같은 방법을 시도 API 호출 : 게시물과 함께 보내는 데이터에 어떤 일이 일어나고 있는지 확신 할 수 없습니다. 두 경우 모두

JSONObject jo= new JSONObject(); 
jo.element("title", "pets").element("mimeType", "application/vnd.google-apps.folder"); 



ContentType contentType= ContentType.create("application/json", Charset.forName("UTF-8")) ; 
StringEntity entity = new StringEntity(jo.toString(), contentType); 

logger.info(" sending "+ jo.toString()); 


postRequest.setEntity(entity); 


HttpResponse response = httpClient.execute(postRequest); 

StringEntity

를 사용하여 양식 이름 값 쌍
DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpPost postRequest = new HttpPost("https://www.googleapis.com/upload/drive/v2/files?key="+GoogleClientConstants.GOOGLE_api_key); 

postRequest.addHeader("Authorization", "Bearer " + accessToken); 
postRequest.addHeader("Content-Type", "application/json; charset=UTF-8"); 


List <NameValuePair> nvps = new ArrayList <NameValuePair>(); 
nvps.add(new BasicNameValuePair("title", "vip")); 
nvps.add(new BasicNameValuePair("mimeType", "application/vnd.google-apps.folder")); 
postRequest.setEntity(new UrlEncodedFormEntity(nvps, org.apache.http.Consts.UTF_8)); 
HttpResponse response = httpClient.execute(postRequest); 

2

)를 사용

1), 구글의 API는 200로 응답하고, 상기 반환 언급 FileResource.

답변

3

코드를 사용하여 약간의 예를 만들었습니다. 그리고 나를 위해 모든 것이 잘 작동합니다. 제발 내 소스 코드를 참조하십시오 :

import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 

import com.google.gson.JsonObject; 

public class SourceCodeProgram { 

    public static void main(String argv[]) throws Exception { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost post = new HttpPost(
       "https://www.googleapis.com/drive/v2/files"); 
     post.addHeader("Content-Type", "application/json"); 
     post.addHeader("Authorization", 
       "Bearer XXXXXXXXXXXXXXXXXXXXXXXXX"); 

     JsonObject jsonObject = new JsonObject(); 
     jsonObject.addProperty("title", "Test folder"); 
     jsonObject 
       .addProperty("mimeType", "application/vnd.google-apps.folder"); 

     post.setEntity(new StringEntity(jsonObject.toString())); 
     httpClient.execute(post); 
    } 
} 

위의 코드는 예외를 throw하지 않습니다. 내 드라이브를 확인한 결과 '테스트 폴더'가 표시됩니다. 게시 URL에 어떤 열쇠가 있습니까?

Google Drive Client Library을 앱에 사용하지 않으십니까?

+0

답변으로 문제가 해결되었습니다. 잘못된 URL을 사용하고 있습니다.이 페이지 (https://developers.google.com/drive/v2/reference/files/insert)를 참조하십시오. POST https://www.googleapis.com/upload/drive/v2/ 파일에 대해 여기에 나열된 URL을 사용하고 있습니다. 잘못되었습니다. 올바른 게시물 URL을 사용하고 문제를 해결했습니다. – user193116

+0

내가 도울 수있어서 기쁩니다. 하지만 흥미 롭습니다. Google 팀에서 쓴 드라이브 API 클라이언트 라이브러리를 사용하지 않는 이유는 무엇입니까? –

+0

다음을 참조하십시오. http://stackoverflow.com/questions/15986911/how-to-use-google-drive-client-library-for-java-with-my-homegrown-oauth-2-framew – user193116

0

예는 ID XXX이있는 상위 폴더 "슈퍼"폴더 "하위"를 생성하는, 당신은 상위 폴더 (들)의 ID (들)을 사용할 필요가 하위 폴더를 만들려면 :

POST https://www.googleapis.com/drive/v2/files 
Authorization: Bearer {ACCESS_TOKEN} 
Content-Type: application/json 
... 
{ 
    "title": "sub", 
    "parents": [{"id":"XXX"}] 
    "mimeType": "application/vnd.google-apps.folder" 
} 

루트 폴더를 만들려면 "parents"인수를 쓸 수 있습니다.

+0

정확하지 않습니다. Firefox 파이어 버그 또는 Chrome 개발 도구 https://developers.google.com/drive/v2/reference/files/insert#try-it에서이 API를 사용하려는 경우 여기에 유의하십시오. 상위 정보를 전달하지 않고 폴더를 만들 수 있으며 폴더는 루트 폴더에 만들어집니다. 문제는 어떻게 든 HTTPClient에 의해 전달 된 데이터가 서버에 도착하지 않거나 잘못된 위치에있는 것입니다. – user193116

관련 문제