web-dev-qa-db-ja.com

Google Advanced Driveサービスを使用してApps Scriptでフォルダーに新しいファイルを作成する

新しいファイルを作成するには、4つの方法があります。

  • DocsList-メインリストではDocsListとして表示されます。 Apps Scriptに組み込まれています。
  • DriveApp-メインリストではDriveとして表示されます。 Apps Scriptに組み込まれています。
  • Drive API-メインリストではDriveとも表示されます。 Apps Scriptに追加する必要があります
  • DocumentApp-メインリストではDocumentとして表示されます。組み込み、ただしドキュメントファイルのみを作成。

これらはすべてservicesと呼ばれます。 Drive APIは高度なサービスと呼ばれます。それで、あなたはどちらを使うべきですか?わかりません、状況によります。この質問は、Drive APIAdvanced Serviceについてです。

2つまたは3つのサービスを使用して仕事をやりたくありません。それらの1つだけを使用したいと思います。しかし、どちらを使用するかを決定するには、それらすべての機能とオプションを知る必要があります。使用する最も単純で最も簡単な方法が私が望むすべてを行うなら、私はそれを使用します。

Drive APIで新しいファイルを作成できるが、DriveAppサービスを使用して、Drive APIで作成したファイルを移動先のフォルダーに移動する必要がある場合、その特定の状況でDrive APIを使用しても意味がありません。

Google Appsスクリプト.gsコードからGoogleドライブに新しいファイルを作成できますが、ファイルはメインの[マイドライブ]に書き込まれます。ファイルを直接サブフォルダーに書き込みたい。私の現在のコードは:

var fileNameSetA = 'someFile.jpg';
var uploadedBlobA = an image uploaded with a file picker;

var fileTestDrive = {
  title: fileNameSetA,
  mimeType: 'image/jpeg'
};

fileTestDrive = Drive.Files.insert(fileTestDrive, uploadedBlobA);

コードは機能しますが、構文がなぜそのようになっているのか私にはわかりません。その理由を説明するドキュメントも見つかりません。プロパティのリストを見つけることができます:

title:mimeType:は、Request Bodyの一部であるオプションのプロパティです。この例から、オプションプロパティは明らかにkey:valueペアオブジェクトに配置されます。したがって、構文は次のとおりです。

Drive.Files.insert(optional properties, content);

以下の必須クエリパラメータもあります。

uploadType-> mediamultipartresumable

しかし、サンプルコードのどこかに指定された必須のuploadTypeパラメータがありません。そのため、Googleのドキュメントが理解できません。

Googleドキュメント挿入

Appsスクリプトの.gsコードファイルでGoogle Advanced Driveサービスを使用して特定のドライブに直接書き込むことはできますか?どうすればいいのですか?

13
Alan Wells

[〜#〜] insert [〜#〜]のドキュメントのDrive APIはこのリンクにあります:

INSERT用のドライブAPI

Request bodyのセクションがあります。 InsertOptional Propertiesの1つは親[]。大括弧[]は、親のリストを指定できることを示しています。 parents []のドキュメントには、次のように記載されています。

このファイルを含む親フォルダーのコレクション。このフィールドを設定すると、指定されたすべてのフォルダーにファイルが配置されます。挿入時に、フォルダーが指定されていない場合、ファイルはデフォルトのルートフォルダーに配置されます。

そう、 。 。 。 Drive APIInsertを使用して、 。 。 。 [〜#〜] can [〜#〜]新しいファイルをサブフォルダーに直接書き込むことができます。それが可能だ。

今、Google Drive SDKHTTPリクエストの用語と構文Apps Scriptの内容とは異なります。

.gsファイル内でDrive API HTTPリクエストを呼び出すための構文は、次の3つのいずれかです。

  • Drive.Files.insert(FILEリソース)
  • Drive.Files.insert(FILEリソース、BLOB mediaData)
  • Drive.Files.insert(FILEリソース、BLOB mediaData、OBJECT optionalArgs)

上記のリストに示されている構文は、Apps Scriptコードエディター内のオートコンプリートドロップダウンリストからのものです。 Drive.Files.と入力すると、可能なメソッドのリストが表示されます。オンラインドキュメントのどこにも構文に関する情報が見つかりません。

それでは、parents []オプションプロパティはどこに行くのでしょうか。まあ、それはブロブではないので、それを除外することができます。 FILE resourceまたはOBJECT optionalArgsです。 optionalArgsは、objectであることを示しますが、FILE resourceは実際には、オブジェクトも。

例では、FILE resourceはkey:valueペアオブジェクトとして構築されています。

ファイルのアップロード-高度なドライブサービス-Googleドキュメント

4
Alan Wells

新しいファイルを作成する最も簡単な方法は、純粋なGoogle Appsスクリプトに付属するDriveAppを使用することです。

_var dir = DriveApp.getFolderById("{dir_id}");
var file = dir.createFile(name, content);
_

正確なディレクトリのIDがわからない場合は、名前でフォルダを取得できます。

_var dir = DriveApp.getFoldersByName(name).next();
_

next()は、名前が指定された値に一致するすべてのディレクトリのコレクションを返すため、getFoldersByName()が存在します。

DriveApp docsも確認してください: https://developers.google.com/apps-script/reference/drive/drive-app

12
Lucas Wa

少し遅いかもしれませんが、 REST API docs を見ると、Drive.Files.insertを使用して任意のフォルダーに挿入できることがわかります。挿入するファイルのプロパティにフォルダのIDを追加するだけです。

_var file = {
   title: 'myFile',
   "parents": [{'id':folder.getId()}],  //<--By setting this parent ID to the folder's ID, it creates this file in the correct folder.
   mimeType: 'image/png'
 };
_

フォルダーIDは、GoogleドライブのGUIを使用して、または here のように、共有可能なリンクから取得できます。 (例えば、右側の実行機能を使用します。)

または、folder.getID()Drive.getFoldersByName('name of folder') で置き換えることにより、名前でフォルダにアクセスできます。

Drive.Files.insert()は引数を受け入れますが、Drive.createFile()およびDrive.createFolder()は受け入れないため、これは役に立ちます。

10
morrows_end

この方法で、DriveAppを使用して、指定したフォルダーにファイルを作成することができました。

var driveFolder = DriveApp.getFolderByName("MyDriveFolder");
var file = driveFolder.createFile(formObject.txtReceipt);
file.setName("MyFile");    

PS:formObject.txtReceiptは、html内のフォームのファイルアップロードコントロールからのものであり、これはblobを返します

1
Ruch