Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Google Drive REST AP和HTTPClient创建文件夹?_Java_Google Api_Google Drive Api_Apache Httpclient 4.x - Fatal编程技术网

Java 如何使用Google Drive REST AP和HTTPClient创建文件夹?

Java 如何使用Google Drive REST AP和HTTPClient创建文件夹?,java,google-api,google-drive-api,apache-httpclient-4.x,Java,Google Api,Google Drive Api,Apache Httpclient 4.x,我正在使用GoogleDriveRESTAPI和HTTPClient创建一个文件夹。 REST API是一个文档,请注意,REST AP请求执行时使用了错误的数据:tt创建了一个名为“untitled”的新文件,并将我的json放在那里 我尝试过用HTTPClient构建POST请求的不同方法,这些方法都成功地执行了——但不知何故,Google驱动器会创建一个文件并返回此数据,而忽略我提交的POST数据 这就是服务器响应的内容 “种类”:“驱动器#文件”, “id”:“0B-fYJN-c4UD

我正在使用GoogleDriveRESTAPI和HTTPClient创建一个文件夹。 REST API是一个文档,请注意,REST AP请求执行时使用了错误的数据:tt创建了一个名为“untitled”的新文件,并将我的json放在那里

我尝试过用HTTPClient构建POST请求的不同方法,这些方法都成功地执行了——但不知何故,Google驱动器会创建一个文件并返回此数据,而忽略我提交的POST数据

这就是服务器响应的内容

“种类”:“驱动器#文件”, “id”:“0B-fYJN-c4UDjUlh1TUZadF9vejA”,这是一个有效的id “标题”:“无标题”————标题错误 “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);

在这两种情况下,GoogleAPI都以200和上述返回的FileResource作为响应

要创建子文件夹,您必须使用父文件夹的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”参数

我使用您的代码创建了一个小示例。对我来说一切正常。请参阅我的源代码:

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);
    }
}
上述代码不会引发任何异常。我已经检查了我的驱动器,可以在其中看到“测试文件夹”。你在post-URL中放的键是什么


为什么不在应用程序中使用?

这不太正确——如果您在这里使用Firefox firebug或Chrome dev工具尝试此api,您会注意到您可以创建文件夹,而无需传递家长信息,并且文件夹将在根文件夹中创建。问题是HTTPClient传递的数据没有到达服务器或位于错误的位置。您的答案解决了问题。我使用了错误的URL:请查看此页-。我用这里列出的URL发帖子——这是错误的。您使用了正确的post URL并解决了此问题。我很高兴能提供帮助。但我有意思的是,为什么不使用谷歌团队编写的驱动API客户端库呢?请看这个:我正试图用HTTPURLConnection实现这一点,但运气不好。正如Android文档所指出的那样,DefaultHttpClient不应该再使用了。您的案例中的问题在哪里?您从API收到了什么样的响应?
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);
    }
}