Google API Google DriveNode.jsはファイルoAuth2をアップロードできません

t33n

ねえ、私は今6時間以上試しましたが、何も機能しませんでした。ここまで来ました。

私はグーグルAPIページからこのデフォルトコードで私のAPIへの正常な接続を作成しました。また、コンソールのGoogleページで高度な機能のGoogleドライブを有効にしました。トークンの作成に成功し、C:\ Users \ Administrator.credentialsに保存されました。

var fs = require('fs');
var readline = require('readline');
var google = require('googleapis');
var googleAuth = require('google-auth-library');

// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/drive-nodejs-quickstart.json
var SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly'];
var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH ||
    process.env.USERPROFILE) + '/.credentials/';
var TOKEN_PATH = TOKEN_DIR + 'drive-nodejs-quickstart.json';

// Load client secrets from a local file.
fs.readFile('client_secret.json', function processClientSecrets(err, content) {
  if (err) {
    console.log('Error loading client secret file: ' + err);
    return;
  }
  // Authorize a client with the loaded credentials, then call the
  // Drive API.
  authorize(JSON.parse(content), listFiles);
});

/**
 * Create an OAuth2 client with the given credentials, and then execute the
 * given callback function.
 *
 * @param {Object} credentials The authorization client credentials.
 * @param {function} callback The callback to call with the authorized client.
 */
function authorize(credentials, callback) {
  var clientSecret = credentials.installed.client_secret;
  var clientId = credentials.installed.client_id;
  var redirectUrl = credentials.installed.redirect_uris[0];
  var auth = new googleAuth();
  var oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);

  // Check if we have previously stored a token.
  fs.readFile(TOKEN_PATH, function(err, token) {
    if (err) {
      getNewToken(oauth2Client, callback);
    } else {
      oauth2Client.credentials = JSON.parse(token);
      callback(oauth2Client);
    }
  });
}

/**
 * Get and store new token after prompting for user authorization, and then
 * execute the given callback with the authorized OAuth2 client.
 *
 * @param {google.auth.OAuth2} oauth2Client The OAuth2 client to get token for.
 * @param {getEventsCallback} callback The callback to call with the authorized
 *     client.
 */
function getNewToken(oauth2Client, callback) {
  var authUrl = oauth2Client.generateAuthUrl({
    access_type: 'offline',
    scope: SCOPES
  });
  console.log('Authorize this app by visiting this url: ', authUrl);
  var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });
  rl.question('Enter the code from that page here: ', function(code) {
    rl.close();
    oauth2Client.getToken(code, function(err, token) {
      if (err) {
        console.log('Error while trying to retrieve access token', err);
        return;
      }
      oauth2Client.credentials = token;
      storeToken(token);
      callback(oauth2Client);
    });
  });
}

/**
 * Store token to disk be used in later program executions.
 *
 * @param {Object} token The token to store to disk.
 */
function storeToken(token) {
  try {
    fs.mkdirSync(TOKEN_DIR);
  } catch (err) {
    if (err.code != 'EEXIST') {
      throw err;
    }
  }
  fs.writeFile(TOKEN_PATH, JSON.stringify(token));
  console.log('Token stored to ' + TOKEN_PATH);
}

/**
 * Lists the names and IDs of up to 10 files.
 *
 * @param {google.auth.OAuth2} auth An authorized OAuth2 client.
 */
function listFiles(auth) {
  var service = google.drive('v3');
  service.files.list({
    auth: auth,
    pageSize: 10,
    fields: "nextPageToken, files(id, name)"
  }, function(err, response) {
    if (err) {
      console.log('The API returned an error: ' + err);
      return;
    }
    var files = response.files;
    if (files.length == 0) {
      console.log('No files found.');
    } else {
      console.log('Files:');
      for (var i = 0; i < files.length; i++) {
        var file = files[i];
        console.log('%s (%s)', file.name, file.id);
      }
    }
  });
}

このスクリプトを再実行すると、

Files:
sample file.mp4 (123456789sampelcode)
projektname (123456789sampelcode)
Getting started (123456789sampelcode)

何かを再入力する必要がないため、接続はトークンで機能するようになりました。ファイルをアップロードする方法がよくわかりません。自分のアップロード機能を含めようとすると、ログインプロセスと組み合わせることができないため、使用できません。私はそれを観た

function listFiles(auth) {
}

ログイン後にデフォルトで実行されました。だから私はこの関数に自分のコードを入力するとうまくいくと思った。だからこれを作成しました

function listFiles(auth) {
var drive = google.drive('v3');
var fileMetadata = {
  'name': 'photo.jpg'
};
var media = {
  mimeType: 'image/jpeg',
  body: fs.createReadStream('./photo.jpg')
};
drive.files.create({
   resource: fileMetadata,
   media: media,
   auth: auth,
   fields: 'id'
}, function(err, file) {
  if(err) {
    // Handle error
    console.log(err);
  } else {
    console.log('File Id: ', file.id);
  }
});

}

しかし、何も起こりません。私のターミナルウィンドウは無限にロードされています。エラーなし、なし。

バージョン2-これは私の2番目のバージョンです。また、ログも何もありません。ファイアウォールをオフにしたので、ファイアウォールやウイルス対策などに問題はありません。デフォルトのスクリプトでは、Googleドライブからファイルを確認できるからです。

const fs = require('fs');
const readline = require('readline');
const google = require('googleapis');
const googleAuth = require('google-auth-library');
const drive = google.drive('v3');

// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/drive-nodejs-quickstart.json
var SCOPES = ['https://www.googleapis.com/auth/drive'];
var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH ||
       process.env.USERPROFILE) + '/.credentials/';
var TOKEN_PATH = TOKEN_DIR + 'drive-nodejs-quickstart.json';


// Load client secrets from a local file.
fs.readFile('client_secret.json', function processClientSecrets(err, content) {
     if (err) {
       console.log('Error loading client secret file: ' + err);
       return;
     }
     // Authorize a client with the loaded credentials, then call the
     // Drive API.
     //authorize(JSON.parse(content), listFiles);
     authorize(JSON.parse(content), real_upload_files);
});

/*
    * Create an OAuth2 client with the given credentials, and then execute the
    * given callback function.
    *
    * @param {Object} credentials The authorization client credentials.
    * @param {function} callback The callback to call with the authorized client.
    */
function authorize(credentials, callback) {
     var clientSecret = credentials.installed.client_secret;
     var clientId = credentials.installed.client_id;
     var redirectUrl = credentials.installed.redirect_uris[0];
     var auth = new googleAuth();
     var oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);


     // Check if we have previously stored a token.
     fs.readFile(TOKEN_PATH, function(err, token) {
       if (err) {
         getNewToken(oauth2Client, callback);
         //console.log('5')
       } else {
         oauth2Client.credentials = JSON.parse(token);
         callback(oauth2Client);
         // console.log('4')
       }
     });
} // function authorize(credentials, callback) {





function real_upload_files(auth) {


var fileMetadata = {
     'name': 'photo.jpg'
};
var media = {
     mimeType: 'image/jpeg',
     body: fs.createReadStream('./photo.jpg')
};
drive.files.create({
      resource: fileMetadata,
      media: media,
      auth: auth,
      fields: 'id'
}, function(err, file) {
     if(err) {
       // Handle error
       console.log(err);
     } else {
       console.log('File Id: ', file.id);
     }
});


} // function real_upload_files(auth) {

また、auth:authをauth:oauth2Clientに変更し、関数でも変更すると、同じ結果の無限のロード画面になります。

誰かが私にファイルをアップロードする方法やoAuth2で他のことをする方法を説明できますか?node.jsの初心者として、node.jsで見つけるサンプルコードが少ないことがわかりました..これで苦労している人を助けてください..助けてください:Dドロップボックスでは10分かかりますが、簡単に使用できますAPIキー..

タナイケ

あなたのスクリプトは間違いではないと思います。私の環境では、スクリプトは正常に機能します。そこで、以下の2つの変更を提案します。

変更点:

  1. これにはどの端末を使用しますか?C:\Users\Administrator.credentialsあなたの質問から、あなたはウィンドウズOSを使用しているようですもしそうなら、あなたcmd.exeはこれに使うことができますか?Windowsを使用しない場合。ターミナルは変更しないでください。
  2. readFile()ファイルを読み取るための使用はどうですか?readFile()ファイル内のデータ全体をメモリに読み取ることができます。だから、エラーは避けられるのではないかと思いました。ただし、ファイルサイズが大きい場合は、を使用することをお勧めしますcreateReadStream()それを確認しreadFile()WindowsOSの端末としてcreateReadStream()使用cmd.exeてGoogleドライブにファイルをアップロードできることを確認ました。

変更されたスクリプト:

function real_upload_files(auth) {
    fs.readFile('./photo.jpg', function(err, content){
        var fileMetadata = {
            'name': 'photo.jpg',
        };
        var media = {
            mimeType: 'image/jpeg',
            body: new Buffer(content, 'binary'),
        };
        drive.files.create({
            resource: fileMetadata,
            media: media,
            auth: auth,
            fields: 'id',
        }, function(err, file) {
            if (err) {
                console.log(err);
            } else {
                console.log('File Id: ', file.id);
            }
        });
    });
}

これらが解決につながるかどうかはわかりません。申し訳ありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Google DriveNode.js-ノードv7からv9への更新後にファイルをアップロード中にエラーが発生しました

分類Dev

Google API PHP CLIENT> 10000ファイル、APPENGINEサービスにアップロードできません

分類Dev

GoogleドライブAPI:nodejsを使用してファイルをルートフォルダーにアップロードできません

分類Dev

APIを使用してGoogleドライブでアップロードされたファイルを開くことができません

分類Dev

GoogleドライブAPIを使用してPDFファイルをアップロードする-GoogleドライブWebクライアントでプレビューを利用できません

分類Dev

Googleドライブはファイルをアップロードしますが、表示できません

分類Dev

GoogleドライブAPIを介してファイルをダウンロードできません

分類Dev

大きなファイルを読む-GoogleドライブAPIアップロード用に2GB以上

分類Dev

Google OAuth2 api

分類Dev

GoogleドライブAPI-未定義のプロパティ「OAuth2」を読み取れません

分類Dev

本番環境ではGoogle Cloud Storageにファイルをアップロードできません

分類Dev

OAuth2 Google APIからメールとプロファイル情報を取得するにはどうすればよいですか?

分類Dev

Googleドライブのフォルダにファイルをアップロードできません

分類Dev

Google Drive APIは、再利用可能なアップロードで権限を設定できません

分類Dev

APIを使用してGoogleドライブからファイルをダウンロードできません-node.js

分類Dev

Googleドライブにファイルをアップロードできません-C#を使用

分類Dev

Google OAuth API

分類Dev

Google Drive API(PHP)はファイルを一覧表示できません

分類Dev

oauth2 を使用した box.com への Google アプリの外部 API 呼び出し、コールバック関数が見つかりません

分類Dev

Google Apps Scriptプロジェクトのクライアントシークレットファイルを使用して、GoogleからOAuth2アクセストークンを取得することはできますか?

分類Dev

C#でGoogle Sheets APIを使用して、どのようにcsvファイルをGoogle Sheetsにアップロードしますか?

分類Dev

Python Google Drive API、ディスク上のファイルではなくメモリにデータをアップロードしますか?

分類Dev

GTMSessionFetcher.hファイルが見つかりませんアプリを最新のgoogle-api-objectivec-clientにアップグレードしています

分類Dev

GoogleドライブAPIを使用して指定したGoogleドライブにファイルをアップロードします

分類Dev

GoogleドライブAPIはファイルを更新/作成/削除しません

分類Dev

Pythonを使用してGoogleドライブAPIでGoogleスプレッドシートをダウンロードできません

分類Dev

GoogleスプレッドシートAPIがデフォルトの形式を設定できません

分類Dev

Google Apps Scriptを使用してファイルをGoogleドライブにアップロードします(GOOGLEにフォームはありません)

分類Dev

タイプapplication / vnd.google-apps.folderのファイルにコンテンツをアップロードすることはできません

Related 関連記事

  1. 1

    Google DriveNode.js-ノードv7からv9への更新後にファイルをアップロード中にエラーが発生しました

  2. 2

    Google API PHP CLIENT> 10000ファイル、APPENGINEサービスにアップロードできません

  3. 3

    GoogleドライブAPI:nodejsを使用してファイルをルートフォルダーにアップロードできません

  4. 4

    APIを使用してGoogleドライブでアップロードされたファイルを開くことができません

  5. 5

    GoogleドライブAPIを使用してPDFファイルをアップロードする-GoogleドライブWebクライアントでプレビューを利用できません

  6. 6

    Googleドライブはファイルをアップロードしますが、表示できません

  7. 7

    GoogleドライブAPIを介してファイルをダウンロードできません

  8. 8

    大きなファイルを読む-GoogleドライブAPIアップロード用に2GB以上

  9. 9

    Google OAuth2 api

  10. 10

    GoogleドライブAPI-未定義のプロパティ「OAuth2」を読み取れません

  11. 11

    本番環境ではGoogle Cloud Storageにファイルをアップロードできません

  12. 12

    OAuth2 Google APIからメールとプロファイル情報を取得するにはどうすればよいですか?

  13. 13

    Googleドライブのフォルダにファイルをアップロードできません

  14. 14

    Google Drive APIは、再利用可能なアップロードで権限を設定できません

  15. 15

    APIを使用してGoogleドライブからファイルをダウンロードできません-node.js

  16. 16

    Googleドライブにファイルをアップロードできません-C#を使用

  17. 17

    Google OAuth API

  18. 18

    Google Drive API(PHP)はファイルを一覧表示できません

  19. 19

    oauth2 を使用した box.com への Google アプリの外部 API 呼び出し、コールバック関数が見つかりません

  20. 20

    Google Apps Scriptプロジェクトのクライアントシークレットファイルを使用して、GoogleからOAuth2アクセストークンを取得することはできますか?

  21. 21

    C#でGoogle Sheets APIを使用して、どのようにcsvファイルをGoogle Sheetsにアップロードしますか?

  22. 22

    Python Google Drive API、ディスク上のファイルではなくメモリにデータをアップロードしますか?

  23. 23

    GTMSessionFetcher.hファイルが見つかりませんアプリを最新のgoogle-api-objectivec-clientにアップグレードしています

  24. 24

    GoogleドライブAPIを使用して指定したGoogleドライブにファイルをアップロードします

  25. 25

    GoogleドライブAPIはファイルを更新/作成/削除しません

  26. 26

    Pythonを使用してGoogleドライブAPIでGoogleスプレッドシートをダウンロードできません

  27. 27

    GoogleスプレッドシートAPIがデフォルトの形式を設定できません

  28. 28

    Google Apps Scriptを使用してファイルをGoogleドライブにアップロードします(GOOGLEにフォームはありません)

  29. 29

    タイプapplication / vnd.google-apps.folderのファイルにコンテンツをアップロードすることはできません

ホットタグ

アーカイブ