2013-04-12 72 views
1

我正在使用Google Drive REST API和HTTPClient創建文件夾。 REST API是文檔here請注意,REST AP請求執行 - 但使用了錯誤的數據:tt創建一個名爲「untitled」的新文件,並將我的json放在那裏。如何使用Google Drive REST AP和HTTPClient創建文件夾?

我嘗試過使用HTTPClient構建POST請求的不同方法,該方法可以成功執行 - 但不知何故,Google Drive響應創建文件並返回此數據並忽略我提交的POST數據。

這是服務器與
reponds ..

「種」: 「驅動器#文件」, 「ID」: 「0B-fYJN-c4UDjUlh1TUZadF9vejA」,這是一個有效ID 「稱號「: 「無題」,----錯題 「mime類型」: 「應用/ JSON的;字符集= UTF-8」, - 這是錯誤的mime類型 ..

我曾嘗試通過以下方式調用API:我不確定發送給我的數據發生了什麼。

1)使用形式名稱值對

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)使用StringEntity

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

在兩種情況下,谷歌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); 
    } 
} 

上面的代碼不會引發任何異常。我已經檢查過我的雲端硬盤,並且可以看到其中的「測試文件夾」。你在網址中輸入什麼關鍵字?

你爲什麼不在你的應用中使用Google Drive Client Library

+0

你的答案解決了這個問題。我使用了錯誤的網址:請參閱此頁面 - https://developers.google.com/drive/v2/reference/files/insert。我使用的是此處列出的URL,用於POST https://www.googleapis.com/upload/drive/v2/files - 這是錯誤的。您使用了正確的帖子網址並解決了問題。 – user193116

+0

我很高興能幫上忙。但我很有趣,你爲什麼不使用Google團隊編寫的Drive API客戶端庫? –

+0

請參閱此:http://stackoverflow.com/questions/15986911/how-to-use-google-drive-client-library-for-java-with-my-homegrown-oauth-2-framew – user193116

0

要創建您必須使用父文件夾(S)的ID(S)的子文件夾,例如在具有ID XXX父文件夾「超級」創建文件夾「子」:

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

要創建根文件夾,您可以提出「父母」參數

+0

這並不完全正確 - 如果您使用Firefox螢火蟲或Chrome開發工具https://developers.google.com/drive/v2/reference/files/insert#try-it嘗試此api,您會注意到您可以創建文件夾而無需傳遞父級的信息,並且該文件夾將在根文件夾中創建。問題在於HTTPClient傳遞的數據不會傳遞到服務器,或者出現在錯誤的地方。 – user193116

相關問題