Google drive api 如何使用HttpClient库从googledrive下载文件?

Google drive api 如何使用HttpClient库从googledrive下载文件?,google-drive-api,apache-httpclient-4.x,apache-commons-httpclient,Google Drive Api,Apache Httpclient 4.x,Apache Commons Httpclient,我正在尝试在页面上集成Google Picker。用户使用选择器登录到他的google帐户并选择一个文件。我正在尝试使用ApacheHttpClient库下载此文件 以下是实施细节: 我在Javascript上使用了客户端身份验证,如本文所强调的。获得文件的“fileId”后,我使用Google Drive API执行了一次身份验证以检索文件元数据-名称、用户、日期、下载URL、导出链接等。如果您有fileId,您可以使用上面的链接测试端点并查看响应 函数后下载(resp){ var-link;

我正在尝试在页面上集成Google Picker。用户使用选择器登录到他的google帐户并选择一个文件。我正在尝试使用ApacheHttpClient库下载此文件

以下是实施细节:

我在Javascript上使用了客户端身份验证,如本文所强调的。获得文件的“fileId”后,我使用Google Drive API执行了一次身份验证以检索文件元数据-名称、用户、日期、下载URL、导出链接等。如果您有fileId,您可以使用上面的链接测试端点并查看响应

函数后下载(resp){
var-link;
var data=$.parseJSON(resp);
console.log(data.webContentLink);
if(data.mimeType==“应用程序/pdf”){
link=data.downloadUrl;
}否则{
link=(data.exportLinks)['application/pdf'];
}
//我希望使用下面的链接下载服务器端的文件
//使用HttpClient库。
console.log(“下载链接-”+链接);
}
//在选择器上选择文件后回调
函数选择器回调(数据){
if(data.action==google.picker.action.PICKED){
var id=data.docs[0].id;
var accessToken=gapi.auth.getToken().access\u token;
console.log(id);
var xhr=new XMLHttpRequest();
xhr.open('GET','https://www.googleapis.com/drive/v2/files/“+id);
setRequestHeader('Authorization'、'Bearer'+accessToken);
xhr.onload=函数(){
下载后(xhr.responseText);
};
xhr.onerror=函数(){
checkAuth();
};
xhr.send();
}
}
下载代码:

import java.io.IOException;
导入org.apache.http.Header;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
公共类下载文件{
公共静态void main(字符串[]args)引发IOException{
字符串链接=”https://docs.google.com/uc? id=0ByJwoNOQMrO_S3hlWGRfa2JwVWM&export=download”;
DefaultHttpClient httpclient=新的DefaultHttpClient();
HttpGet=新的HttpGet(链接);
HttpResponse response=httpclient.execute(get);
Header[]headers=response.getAllHeaders();
用于(标题:标题){
System.out.println(“键:“+header.getName()+”,值:“+header.getValue()”);
}
}
}
如果我使用浏览器上的链接或POSTMAN Chrome扩展名,我就能正确下载文件。REST客户端以“application/pdf”的形式正确报告传入数据

但是,当我使用上面的代码片段对URL执行HttpGet时,传入数据的内容类型为“text/html”。没有关于这种行为的线索。我认为下载文件时,不需要对最终URL进行任何不同的处理


有人面对过这个问题吗?提前感谢。

我通过添加身份验证头解决了这个问题。我猜auth令牌存储在浏览器的用户会话中,因此我可以通过点击URL下载文件。对于独立Java程序,我们可能也必须传递身份验证令牌

下面的代码有效

import java.io.IOException;
导入org.apache.http.Header;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
公共类下载文件{
公共静态void main(字符串[]args)引发IOException{
字符串链接=”https://docs.google.com/feeds/download/documents/export/Export?id=1vE4GVvVVipwMjKsc1q9p75LYWrRy8DZz0APjVFiHL9A";
DefaultHttpClient httpclient=新的DefaultHttpClient();
HttpGet=新的HttpGet(链接);
//get.addHeader(“内容类型”、“应用程序/pdf”);
get.addHeader(“授权”、“承载1VE4GVVIPWMJKSC1Q9P75LYWRRY8DZZ0APJVFIHL9A”);
HttpResponse response=httpclient.execute(get);
Header[]headers=response.getAllHeaders();
用于(标题:标题){
System.out.println(“键:“+header.getName()+”,值:“+header.getValue()”);
}
}
}

如何下载HttpClient库从Objective c中的Google Drive下载文件。如果有任何想法,请回复。