gpt4 book ai didi

google-drive-api - 如何使用 HttpClient 库从 Google Drive 下载文件?

转载 作者:行者123 更新时间:2023-12-04 19:33:07 25 4
gpt4 key购买 nike

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

以下是实现细节:

我在 Javascript 上使用了客户端身份验证,如本 Google Tutorial 上突出显示的那样.获得文件的“fileId”后,我执行了经过身份验证的 GET使用 Google Drive API 检索文件元数据 - 名称、用户、日期、downloadUrl、exportLinks 等。如果您有 fileId,您可以使用上面的链接来测试端点并查看响应。

   function postDownload (resp) {
var link;
var data = $.parseJSON (resp);
console.log (data.webContentLink);
if (data.mimeType == "application/pdf"){
link = data.downloadUrl;
} else {
link = (data.exportLinks)['application/pdf'];
}
//I wish to use the below link to download the file on server side
//using HttpClient libraries.
console.log ("Download Link - " +link);
}

//Call back after a file is selected on the picker
function pickerCallback(data) {
if (data.action == google.picker.Action.PICKED) {
var id = data.docs[0].id;
var accessToken = gapi.auth.getToken().access_token;
console.log (id);

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.googleapis.com/drive/v2/files/' + id);
xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
xhr.onload = function() {
postDownload(xhr.responseText);
};
xhr.onerror = function() {
checkAuth();
};
xhr.send();
}
}

下载代码:

    import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

public class DownloadFile {

public static void main(String[] args) throws IOException {
String link = "https://docs.google.com/uc? id=0ByJwoNOQMrO_S3hlWGRfa2JwVWM&export=download";

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet get = new HttpGet(link);
HttpResponse response = httpclient.execute(get);

Header[] headers = response.getAllHeaders();
for (Header header : headers) {
System.out.println("Key : " + header.getName() + " ,Value : " + header.getValue());
}
}

}

如果我使用浏览器上的链接或 POSTMAN Chrome 扩展程序,我可以正确下载文件。 REST 客户端将传入数据正确报告为“应用程序/pdf”。

但是,当我使用上述 Snippet 对 URL 执行 HttpGet 时,传入数据的内容类型为 'text/html' 。对这种行为一无所知。我认为下载文件不需要对最终 URL 进行任何不同的处理。

有没有人遇到过这个问题?提前致谢。

最佳答案

我能够通过添加身份验证 header 来解决该问题。我猜身份验证 token 存储在浏览器上的用户 session 中,因此我能够通过点击 URL 下载文件。对于独立的 Java 程序,我们可能也必须传递身份验证 token 。

下面的代码有效。

import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

public class DownloadFile {

public static void main(String[] args) throws IOException {
String link = "https://docs.google.com/feeds/download/documents/export/Export?id=1vE4GVvVVipwMjKsc1q9p75LYWrRy8DZz0APjVFiHL9A";

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet get = new HttpGet(link);
// get.addHeader("Content-Type", "application/pdf");
get.addHeader("Authorization", "Bearer 1vE4GVvVVipwMjKsc1q9p75LYWrRy8DZz0APjVFiHL9A");
HttpResponse response = httpclient.execute(get);

Header[] headers = response.getAllHeaders();
for (Header header : headers) {
System.out.println("Key : " + header.getName() + " ,Value : " + header.getValue());
}
}
}

关于google-drive-api - 如何使用 HttpClient 库从 Google Drive 下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18216044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com