2

我只是想实现 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 在我的应用程序上处于“开启”状态。

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

4

2 回答 2

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();

            }
        });

    });

}
于 2016-03-25T06:58:29.023 回答
-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
                    }
                });
        }
于 2014-09-13T08:18:09.347 回答