web-dev-qa-db-ja.com

Google Drive Api v3(JavaScript)でファイルを作成する

Google Drive API v3を使用してコンテンツを含むファイルを作成したい。 OAuth=で認証し、Drive APIをロードしました。次のようなステートメントが機能します(ただし、コンテンツのないファイルが生成されます):

gapi.client.drive.files.create({
    "name": "settings",
}).execute();

残念ながら、コンテンツを含むファイルを作成する方法がわかりません。 Drive API v3を使用したJavaScriptの例が見つかりません。渡す必要のある特別なパラメーターはありますか?

簡単にするために、作成したファイルのコンテンツであるはずのJSON形式の '{"name": "test"}'のような文字列があるとします。

18
Geminus

これがgapi.client.driveのソリューションです。

var parentId = '';//some parentId of a folder under which to create the new folder
var fileMetadata = {
  'name' : 'New Folder',
  'mimeType' : 'application/vnd.google-apps.folder',
  'parents': [parentId]
};
gapi.client.drive.files.create({
  resource: fileMetadata,
}).then(function(response) {
  switch(response.status){
    case 200:
      var file = response.result;
      console.log('Created Folder Id: ', file.id);
      break;
    default:
      console.log('Error creating the folder, '+response);
      break;
    }
});

connect/authorise以下のスコープ のいずれかを指定する必要があります

https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.file

編集:mimeTypeapplication/vnd.google-apps.folderからサポートされているいずれかの google mime types に変更することで、Googleファイル(ドキュメント、シートなど)を作成できます。 [〜#〜]ただし[〜#〜]、現在のところ、作成したファイルにコンテンツをアップロードすることはできません。

ファイルをアップロードするには、 @ Geminusが提供するソリューション を使用します。テキストファイルまたはcsvファイルをアップロードし、そのコンテンツタイプをそれぞれgoogle docまたはgoogle sheetに設定できることに注意してください。Googleはそれを変換しようとします。私はこれをテキスト-> docでテストしましたが、動作します。

5
Aurovrata

残念ながら、GoogleドライブAPIのみを使用した回答は見つかりませんでした。代わりに、Gerardoのコメントに従って、GoogleリクエストAPIを使用しました。以下は、Googleドライブにファイルをアップロードする関数です。

var createFileWithJSONContent = function(name,data,callback) {
  const boundary = '-------314159265358979323846';
  const delimiter = "\r\n--" + boundary + "\r\n";
  const close_delim = "\r\n--" + boundary + "--";

  const contentType = 'application/json';

  var metadata = {
      'name': name,
      'mimeType': contentType
    };

    var multipartRequestBody =
        delimiter +
        'Content-Type: application/json\r\n\r\n' +
        JSON.stringify(metadata) +
        delimiter +
        'Content-Type: ' + contentType + '\r\n\r\n' +
        data +
        close_delim;

    var request = gapi.client.request({
        'path': '/upload/drive/v3/files',
        'method': 'POST',
        'params': {'uploadType': 'multipart'},
        'headers': {
          'Content-Type': 'multipart/related; boundary="' + boundary + '"'
        },
        'body': multipartRequestBody});
    if (!callback) {
      callback = function(file) {
        console.log(file)
      };
    }
    request.execute(callback);
}
17
Geminus