1

HTTPClient で Google Drive REST API を使用してフォルダを作成しています。REST API のドキュメントはこちら REST AP リクエストが実行されることに注意してください -- ただし、間違ったデータが使用されます: tt は「untitled」という名前の新しいファイルを作成し、そこに json を配置します。

正常に実行される HTTPClient を使用して POST リクエストを作成するさまざまな方法を試しましたが、何らかの方法で Google ドライブが応答してファイルを作成し、このデータを返し、送信した POST データを無視します。

これは、サーバーが応答するもの
です..

"kind": "drive#file", "id": "0B-fYJN-c4UDjUlh1TUZadF9vejA", これは有効な ID "title": "Untitled", ----間違ったタイトル "mimeType": "application/json; charset=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 が返されます。

4

2 に答える 2

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 ドライブ クライアント ライブラリを使用しないのはなぜですか?

于 2013-04-12T22:34:24.613 に答える
0

サブフォルダーを作成するには、親フォルダーの ID を使用する必要があります。たとえば、ID XXX を持つ親フォルダー「super」にフォルダー「sub」を作成するには、次のようにします。

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" 引数を省略できます。

于 2013-04-12T15:56:20.280 に答える