2

Googleドライブピッカーを介してユーザーが送信したファイルを(バックグラウンドで)ダウンロードするために、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 が「オン」になっています。

取得ファイルをダウンロードできないことを除いて、すべて正常に動作します。

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 に答える