新しいファイルを作成するには、4つの方法があります。
これらはすべて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
-> media
、multipart
、resumable
しかし、サンプルコードのどこかに指定された必須のuploadType
パラメータがありません。そのため、Googleのドキュメントが理解できません。
Appsスクリプトの.gsコードファイルでGoogle Advanced Driveサービスを使用して特定のドライブに直接書き込むことはできますか?どうすればいいのですか?
[〜#〜] insert [〜#〜]のドキュメントのDrive APIはこのリンクにあります:
Request bodyのセクションがあります。 InsertのOptional Propertiesの1つは親[]。大括弧[]は、親のリストを指定できることを示しています。 parents []のドキュメントには、次のように記載されています。
このファイルを含む親フォルダーのコレクション。このフィールドを設定すると、指定されたすべてのフォルダーにファイルが配置されます。挿入時に、フォルダーが指定されていない場合、ファイルはデフォルトのルートフォルダーに配置されます。
そう、 。 。 。 Drive APIでInsertを使用して、 。 。 。 [〜#〜] can [〜#〜]新しいファイルをサブフォルダーに直接書き込むことができます。それが可能だ。
今、Google Drive SDK、HTTPリクエストの用語と構文Apps Scriptの内容とは異なります。
.gs
ファイル内でDrive API HTTPリクエストを呼び出すための構文は、次の3つのいずれかです。
上記のリストに示されている構文は、Apps Scriptコードエディター内のオートコンプリートドロップダウンリストからのものです。 Drive.Files.
と入力すると、可能なメソッドのリストが表示されます。オンラインドキュメントのどこにも構文に関する情報が見つかりません。
それでは、parents []オプションプロパティはどこに行くのでしょうか。まあ、それはブロブではないので、それを除外することができます。 FILE resource
またはOBJECT optionalArgs
です。 optionalArgsは、objectであることを示しますが、FILE resource
は実際には、オブジェクトも。
例では、FILE resource
はkey:valueペアオブジェクトとして構築されています。
新しいファイルを作成する最も簡単な方法は、純粋な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
少し遅いかもしれませんが、 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()
は受け入れないため、これは役に立ちます。
この方法で、DriveAppを使用して、指定したフォルダーにファイルを作成することができました。
var driveFolder = DriveApp.getFolderByName("MyDriveFolder");
var file = driveFolder.createFile(formObject.txtReceipt);
file.setName("MyFile");
PS:formObject.txtReceiptは、html内のフォームのファイルアップロードコントロールからのものであり、これはblobを返します