我只是想尝试实施Google云端硬盘选择器API,以便下载用户通过Google云端硬盘选择器提交的文件(在后台)。
我做了谷歌选择器,它工作正常,但后来,我无法下载该文件。 (首先从单个文件开始)。
这是我的代码,在我的梦中我可以在获取选择器文件后立即下载文件。
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在我的应用中处于“开启”状态。
一切正常,但我无法下载检索文件。
答案 0 :(得分:2)
您需要使用其文件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();
}
});
});
}
答案 1 :(得分:-2)
我希望您能够查看文件选择器,现在您想要下载所选文件,以下代码可以这样做:
首先修改您的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
}
});
}