Google Driveへの一括ファイルアップロードとフォルダ管理
中級
これはHR, IT Ops分野の自動化ワークフローで、13個のノードを含みます。主にIf, Set, Code, FormTrigger, GoogleDriveなどのノードを使用。 Google Drive へのバッチファイルアップロードとフォルダ管理
前提条件
- •Google Drive API認証情報
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"meta": {
"instanceId": "d4d7965840e96e50a3e02959a8487c692901dfa8d5cc294134442c67ce1622d3",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "9252c041-d6b2-49fe-8edb-8d8cb8a1341d",
"name": "フォーム送信時",
"type": "n8n-nodes-base.formTrigger",
"position": [
240,
0
],
"webhookId": "0c5c8b39-06a7-4d07-95be-b729d2a9eb6f",
"parameters": {
"options": {},
"formTitle": "Batch File Upload to Google Drive",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "file",
"requiredField": true
},
{
"fieldLabel": "folderName",
"requiredField": true
}
]
},
"formDescription": "Use this form to upload multiple files to a specific Google Drive folder. Simply select your files and specify your target folder name. If the folder doesn't exist yet, we'll create it automatically for you. This streamlined process allows you to organize and store multiple files in one go, saving you time and effort."
},
"typeVersion": 2.2
},
{
"id": "e27712ac-238d-4b45-b842-a044dc40dccd",
"name": "フォルダ名取得",
"type": "n8n-nodes-base.set",
"position": [
560,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1b997842-86f3-4bce-b8d2-e8d73387dae1",
"name": "folderName",
"type": "string",
"value": "={{ $json.folderName }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "555e761a-ea79-40eb-b36f-72fbcc642fda",
"name": "特定フォルダ検索",
"type": "n8n-nodes-base.googleDrive",
"position": [
800,
0
],
"parameters": {
"filter": {},
"options": {},
"resource": "fileFolder",
"queryString": "=mimeType='application/vnd.google-apps.folder' and name = '{{ $json.folderName }}' and '<folderId>' in parents\n",
"searchMethod": "query"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "2SIFnsVfdw9nx9I4",
"name": "Google Drive account"
}
},
"executeOnce": false,
"typeVersion": 3,
"alwaysOutputData": true
},
{
"id": "2a92c031-44e5-4e07-89ff-058251c43027",
"name": "フォルダが見つかりましたか?",
"type": "n8n-nodes-base.if",
"position": [
1280,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "11abd7e3-d90b-4bb1-a8ba-d3cbc4333d8f",
"operator": {
"type": "object",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "e413cdc8-8424-41d3-8791-e036392a16ac",
"name": "フォルダ作成",
"type": "n8n-nodes-base.googleDrive",
"position": [
1680,
100
],
"parameters": {
"name": "={{ $('On form submission').item.json.folderName }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "17sGS9HdmAtgpd5rC1sVuiIUGyw2hq9IY",
"cachedResultUrl": "https://drive.google.com/drive/folders/17sGS9HdmAtgpd5rC1sVuiIUGyw2hq9IY",
"cachedResultName": "n8n"
},
"resource": "folder"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "2SIFnsVfdw9nx9I4",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "aada549c-3bbd-453b-9d48-4ab25446d8ce",
"name": "ファイルアップロード",
"type": "n8n-nodes-base.googleDrive",
"position": [
2180,
-100
],
"parameters": {
"name": "={{ $json.fileName }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Search specific folder').item.json.id }}"
},
"inputDataFieldName": "=data"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "2SIFnsVfdw9nx9I4",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "7b4bcb6e-3b63-4243-8f38-a18f3d5d44f2",
"name": "アップロード用ファイル準備",
"type": "n8n-nodes-base.code",
"position": [
1920,
-100
],
"parameters": {
"jsCode": "let results = [];\nconst items = $(\"On form submission\").all()\n\nfor (item of items) {\n for (key of Object.keys(item.binary)) {\n results.push({\n json: {\n fileName: item.binary[key].fileName\n },\n binary: {\n data: item.binary[key],\n }\n });\n }\n}\n\nreturn results;"
},
"typeVersion": 2
},
{
"id": "1d08ef78-68e7-4901-80fc-17923344fee3",
"name": "新規フォルダ用ファイル準備",
"type": "n8n-nodes-base.code",
"position": [
1920,
100
],
"parameters": {
"jsCode": "let results = [];\nconst items = $(\"On form submission\").all()\n\nfor (item of items) {\n for (key of Object.keys(item.binary)) {\n results.push({\n json: {\n fileName: item.binary[key].fileName\n },\n binary: {\n data: item.binary[key],\n }\n });\n }\n}\n\nreturn results;"
},
"typeVersion": 2
},
{
"id": "557d2c63-7bbb-4280-b16e-71c6d900973b",
"name": "新規フォルダへアップロード",
"type": "n8n-nodes-base.googleDrive",
"position": [
2180,
100
],
"parameters": {
"name": "={{ $json.fileName }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Create Folder').item.json.id }}"
},
"inputDataFieldName": "=data"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "2SIFnsVfdw9nx9I4",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "e90ccfb0-cf21-45d2-860e-bc2049ed9682",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
-200
],
"parameters": {
"color": 5,
"width": 520,
"height": 520,
"content": "# 🗂️ Bulk File Upload to Google Drive with Folder Management\n\n## Overview\nThis workflow processes a form submission that accepts:\n- Multiple file uploads (any format)\n- Target folder name input\n\nThe workflow automatically:\n- Checks if the specified folder exists in Google Drive\n- Creates the folder if it doesn't exist\n- Uploads all files to the correct folder\n- Maintains original file names and structure\n\nPerfect for batch uploading files while keeping your Drive organized!\n"
},
"typeVersion": 1
},
{
"id": "cd00c8a3-42e3-44f4-89b3-663da809346c",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1100,
-440
],
"parameters": {
"color": 5,
"width": 460,
"height": 380,
"content": "## 🔄 Decision Point: Folder Check\nThe workflow splits into two paths based on folder existence:\n- ✅ TRUE: Use existing folder path\n- 🆕 FALSE: Create new folder path\n\n## 🗂️ Existing Folder Path (Upper)\n1. Prepare Files for Upload: Splits files for individual processing\n2. Upload Files: Uploads to existing folder maintaining structure\n\n## 📁 New Folder Path (Lower)\n1. Create Folder: Generates new folder in Drive\n2. Prepare Files for New Folder: Splits files for individual processing\n3. Upload to New Folder: Uploads to newly created folder"
},
"typeVersion": 1
},
{
"id": "a0b1ff8a-3308-41da-bb4b-01b50cccc456",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1920,
-340
],
"parameters": {
"color": 5,
"width": 360,
"height": 200,
"content": "## ⚙️ File Processing Notes\n- All binary files are split individually for proper upload handling\n- Original file names and structure are preserved\n- Both paths ensure identical file organization\n\nalso see https://n8n.io/workflows/1621-split-out-binary-data/"
},
"typeVersion": 1
},
{
"id": "c16b2105-638d-4d48-b39d-ff8772375674",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
-340
],
"parameters": {
"color": 5,
"width": 660,
"height": 280,
"content": "## 🔍 Search Query Pattern\n\nThe following search pattern looks for a folder with the specified name in a particular parent folder:\nMake sure to replace <folderId>\n\n```javascript\nmimeType='application/vnd.google-apps.folder' and name = '{{ $json.folderName }}' and '<folderId>' in parents\n```\n\n**Important**: Marl Always Output Data so you can check also if nothing found."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"e413cdc8-8424-41d3-8791-e036392a16ac": {
"main": [
[
{
"node": "1d08ef78-68e7-4901-80fc-17923344fee3",
"type": "main",
"index": 0
}
]
]
},
"2a92c031-44e5-4e07-89ff-058251c43027": {
"main": [
[
{
"node": "7b4bcb6e-3b63-4243-8f38-a18f3d5d44f2",
"type": "main",
"index": 0
}
],
[
{
"node": "e413cdc8-8424-41d3-8791-e036392a16ac",
"type": "main",
"index": 0
}
]
]
},
"e27712ac-238d-4b45-b842-a044dc40dccd": {
"main": [
[
{
"node": "555e761a-ea79-40eb-b36f-72fbcc642fda",
"type": "main",
"index": 0
}
]
]
},
"9252c041-d6b2-49fe-8edb-8d8cb8a1341d": {
"main": [
[
{
"node": "e27712ac-238d-4b45-b842-a044dc40dccd",
"type": "main",
"index": 0
}
]
]
},
"555e761a-ea79-40eb-b36f-72fbcc642fda": {
"main": [
[
{
"node": "2a92c031-44e5-4e07-89ff-058251c43027",
"type": "main",
"index": 0
}
]
]
},
"7b4bcb6e-3b63-4243-8f38-a18f3d5d44f2": {
"main": [
[
{
"node": "aada549c-3bbd-453b-9d48-4ab25446d8ce",
"type": "main",
"index": 0
}
]
]
},
"1d08ef78-68e7-4901-80fc-17923344fee3": {
"main": [
[
{
"node": "557d2c63-7bbb-4280-b16e-71c6d900973b",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級 - 人事, IT運用
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
Microsoft Teams会議分析をGPT-4.1、Outlook、Mem.aiを使用して自動化
GPT-4.1、Outlook、Mem.aiを使ってMicrosoft Teams会議の分析を自動化する
If
Set
Code
+
If
Set
Code
61 ノードWayne Simpson
人事
HN求人広告スクレイピング
Hacker News採用情報のスクレイピングと解析
Set
Code
Limit
+
Set
Code
Limit
20 ノードJulian Kaiser
人事
第一轮 Telegram と LinkedIn 快速通道 AI 招聘アシスタント
AI候选人筛选流程:LinkedInへTelegram,統合Gemini与Apify
If
Set
Code
+
If
Set
Code
55 ノードDean Pike
人事
HireMind – AI駆動の履歴書インテリジェント処理フロー
HR AI履歴書スクリーニングと評価:GPT-4とGoogle Workspace
If
Code
Slack
+
If
Code
Slack
26 ノードTrung Tran
人事
AIを活用したLoom動画の質問応答(Gemini-2.5とSlack通知)
AIを活用したLoom動画の質問応答:Gemini-2.5とSlack通知を使用
If
Set
Code
+
If
Set
Code
24 ノードGiovanniSegar
人工知能
OnboardAIgen - Slack × Jira × Driveによる入社業務の自動化ワークフロー
Slack、Jira、Google Workspaceの統合を活用した従業員採用業務の自動化
If
Set
Code
+
If
Set
Code
77 ノードVelebit from Innovatio
人事
ワークフロー情報
難易度
中級
ノード数13
カテゴリー2
ノードタイプ6
作成者
Julian Kaiser
@jksrFull Stack Developer turned AI & Automation Engineer, implementing intelligent solutions with custom code, LLMs & n8n. Use my link to book a consultation on automating your business processes.
外部リンク
n8n.ioで表示 →
このワークフローを共有