2013-04-12 2 views
1

Я использую API REST Google Диска с HTTPClient для создания папки. REST API - это документ here Обратите внимание, что запрос REST AP выполняется, но использует неправильные данные: tt создает новый файл под названием «untitled» и помещает туда мой json.Как создать папку с Google REST AP и HTTPClient?

Я пробовал разные методы построения запроса POST с помощью HTTPClient, которые успешно выполняются - но Google-диск как-то реагирует на создание файла и возвращает эти данные и игнорирует данные POST, которые я отправляю.

Это то, что сервер reponds с
..

"вид": "диск # файл", "идентификатор": "0B-fYJN-c4UDjUlh1TUZadF9vejA", это правильный ID «название «: "Без названия", ---- неправильного названия "MIMETYPE": "приложение/JSON, кодировка = UTF-8", - это неправильно MIMETYPE ..

Я попытался следующими способами вызывая 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); 

В обоих случаях, Google 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); 
    } 
} 

Выше данного кода не делается никаких исключений. Я проверил свой диск, и я вижу в нем «тестовую папку». Каким ключом вы занимаете почтовый URL?

Почему вы не используете Google Drive Client Library в своем приложении?

+0

Ваш ответ решил проблему. Я использовал неправильный URL-адрес: см. Эту страницу - https://developers.google.com/drive/v2/reference/files/insert. Я использовал URL-адрес, указанный здесь для POST https://www.googleapis.com/upload/drive/v2/files - это было неправильно. Вы использовали правильный URL-адрес и решили проблему. – user193116

+0

Я рад, что смогу помочь. Но мне интересно, почему вы не используете клиентскую библиотеку Drive API, которую написала команда Google? –

+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:

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

Это не совсем правильно. Если вы попробуете этот api здесь с Firefox firebug или инструментами Chrome dev, https://developers.google.com/drive/v2/reference/files/insert#try-it, вы заметите что вы можете создавать папки без передачи информации о родителях, и папка будет создана в корневой папке. Проблема в том, что некоторые данные, переданные HTTPClient, не попадают на сервер или находятся в неправильном месте. – user193116

Смежные вопросы