从谷歌选择器中挑选文件后立即下载文件

时间:2014-05-23 08:28:57

标签: google-drive-api google-picker

我只是想尝试实施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在我的应用中处于“开启”状态。

一切正常,但我无法下载检索文件。

2 个答案:

答案 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
                    }
                });
        }