我只是试图实现Google Drive picker API,以便下载用户通过Google drive Picker提交的文件(在后台)。
我做了谷歌选择器,它工作得很好,但是,我就是无法下载文件。(首先从单个文件开始)。
这是我的代码,在我的梦中,我可以在得到选取器的文件后立即下载文件。
function createPicker() {
if (pickerApiLoaded && oauthToken) {
var picker = new google.picker.PickerBuilder().
addView(google.picker.ViewId.DOCS).
addView(google.picker.ViewId.PHOTOS).
addView(google.picker.ViewId.FOLDERS).
enableFeature(google.picker.Feature.MULTISELECT_ENABLED).
setOAuthToken(oauthToken).
setDeveloperKey(developerKey).
setCallback(pickerCallback).
build();
picker.setVisible(true);
}
}
// A simple callback implementation.
function pickerCallback(data) {
var url = 'nothing';
if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) {
var fileId = data.docs[0].id;
var fileUrl = data.docs[0].url;
alert('The user selected: ' + fileId);
console.log(data.docs);
}
var message = 'You picked: ' + url;
document.getElementById('result').innerHTML = message;
}
请注意,我想下载照片,并且我没有访问"downloadUrl“字段的权限。Google Drive Picker和Drive API在我的应用程序上是“开”的。
一切正常,除了我不能下载检索文件。
发布于 2016-03-25 06:58:29
您需要使用文件id获取文件的下载URL。完成后,您可以使用AJAX调用该URL来获取文件数据。您可以选择将文件字节作为blob以表单数据的形式发送到服务器端。
var googleSelectedFiles = new Array();
if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) {
var docs = data[google.picker.Response.DOCUMENTS];
docs.forEach(function (file) {
var downloadUrl;
gapi.client.request({
'path': '/drive/v2/files/' + file.id,
'method': 'GET',
callback: function (responsejs, responsetxt) {
downloadUrl = responsejs.downloadUrl;
var gDoxBlob = null;
var xhr = new XMLHttpRequest();
xhr.open("GET", downloadUrl); //file.url
var accessToken = gapi.auth.getToken().access_token;
xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
xhr.responseType = "blob";
xhr.onload = function () {
gDoxBlob = xhr.response;
googleSelectedFiles.push({ bytes: gDoxBlob, name: file.name });
}
xhr.send();
}
});
});
}
发布于 2014-09-13 08:18:09
我希望你能够看到文件选择器,你现在想下载选定的文件,下面的代码可以做到这一点:
首先修改您的createPicker回调:
function pickerCallback(data) {
var url = 'nothing';
if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) {
var fileId = data.docs[0].id;
getDownloadurl(fileId); //this is the custom function
}
}
然后实现getDownloadUrl
function getDownloadUrl(fileId) {
/*Before executing following client request you must include
<script type="text/javascript" src="https://apis.google.com/js/client.js"></script>
google client library*/
var request =
gapi.client.request({
'path': '/drive/v2/files/' + fileId,
'params': { 'maxResults': '1000' },
callback: function (responsejs, responsetxt) {
var fileDownloadUrl = responsejs.downloadUrl; //using this downloadUrl you will be able to download Drive File Successfully
}
});
}
https://stackoverflow.com/questions/23824421
复制