OpenCode Deployer commited on
Commit
65f3d40
·
1 Parent(s): 0145c19
Files changed (1) hide show
  1. service/gdrive/folder-client.js +123 -115
service/gdrive/folder-client.js CHANGED
@@ -9,133 +9,141 @@ const GoogleDriveOAuth2Service = require('./gdrive-service'); const path = requi
9
  /**
10
 
11
  显示使用帮助 */ function showUsage() { console.log(''); console.log('📁 Google Drive 文件夹专用客户端'); console.log('当前配置文件夹: fastoc'); console.log(''); console.log('📄 文件操作:'); console.log(' node folder-client.js list [数量] - 列出文件夹内文件'); console.log(' node folder-client.js upload <文件路径> - 上传文件到文件夹'); console.log(' node folder-client.js download <文件ID> - 下载文件'); console.log(' node folder-client.js delete <文件ID> - 删除文件'); console.log(' node folder-client.js mkdir <文件夹名> - 在当前文件夹下创建子文件夹'); console.log(' node folder-client.js search <搜索条件> - 在当前文件夹下搜索'); console.log(' node folder-client.js info <文件ID> - 获取文件信息'); console.log(' node folder-client.js test - 测试连接'); console.log(''); }
12
- /**
13
 
14
- 格式化文件信息显示 */ function formatFileInfo(file) { const size = file.size ? ${(parseInt(file.size) / 1024).toFixed(2)} KB : 'N/A'; const type = file.mimeType.includes('folder') ? '📁' : file.mimeType.includes('google-apps') ? '📄' : '📎'; return ${type} ${file.name}\n ID: ${file.id}\n 大小: ${size}\n 修改时间: ${file.modifiedTime}\n;
 
 
 
 
 
 
 
 
15
  }
16
 
17
- async function main() { const args = process.argv.slice(2);
 
18
 
19
- if (args.length === 0) {
20
- showUsage();
21
- return;
22
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
- const command = args[0];
25
-
26
- // fastoc 文件夹 ID
27
- const FASTOC_FOLDER_ID = '12TZDNL8qVBFdd8ej4lNM2IF8xFs3cKhH';
28
- const service = new GoogleDriveOAuth2Service(FASTOC_FOLDER_ID);
29
-
30
- try {
31
- switch (command) {
32
- case 'list':
33
- await service.initialize();
34
- const pageSize = args[1] ? parseInt(args[1]) : 10;
35
- const result = await service.listFiles({ pageSize });
36
-
37
- console.log(`📋 fastoc 文件夹内容 (${result.files.length} 个):`);
38
- console.log('');
39
- result.files.forEach((file, index) => {
40
- console.log(`${index + 1}. ${formatFileInfo(file)}`);
41
- });
42
- break;
43
-
44
- case 'upload':
45
- if (!args[1]) {
46
- console.error('❌ 请指定要上传的文件路径');
47
  break;
48
- }
49
- await service.initialize();
50
- const uploadResult = await service.uploadFile(args[1]);
51
- console.log(' 文件上传成功!');
52
- console.log(`📎 文件名: ${uploadResult.name}`);
53
- console.log(`🆔 文件ID: ${uploadResult.id}`);
54
- console.log(`🔗 链接: ${uploadResult.webViewLink}`);
55
- break;
56
-
57
- case 'download':
58
- if (!args[1]) {
59
- console.error('❌ 请指定要下载的文件ID');
60
  break;
61
- }
62
- await service.initialize();
63
- const destPath = args[2] || './' + args[1] + '.downloaded';
64
- const downloadResult = await service.downloadFile(args[1], destPath);
65
- console.log('✅ 文件下载成功!');
66
- console.log(`📎 文件名: ${downloadResult.fileName}`);
67
- console.log(`💾 保存路径: ${downloadResult.destinationPath}`);
68
- break;
69
-
70
- case 'delete':
71
- if (!args[1]) {
72
- console.error('❌ 请指定要删除的文件ID');
73
  break;
74
- }
75
- await service.initialize();
76
- await service.deleteFile(args[1]);
77
- console.log(' 文件删除成功!');
78
- break;
79
-
80
- case 'mkdir':
81
- if (!args[1]) {
82
- console.error(' 请指定文件夹名称');
 
 
 
83
  break;
84
- }
85
- await service.initialize();
86
- const folderResult = await service.createFolder(args[1]);
87
- console.log(' 文件夹创建成功!');
88
- console.log(`📁 文件夹名: ${folderResult.name}`);
89
- console.log(`🆔 文件夹ID: ${folderResult.id}`);
90
- console.log(`🔗 链接: ${folderResult.webViewLink}`);
91
- break;
92
-
93
- case 'search':
94
- if (!args[1]) {
95
- console.error('❌ 请指定搜索条件');
 
96
  break;
97
- }
98
- await service.initialize();
99
- const searchResult = await service.listFiles({ query: args[1] });
100
- console.log(`🔍 搜索结果 (${searchResult.files.length} 个):`);
101
- console.log('');
102
- searchResult.files.forEach((file, index) => {
103
- console.log(`${index + 1}. ${formatFileInfo(file)}`);
104
- });
105
- break;
106
-
107
- case 'info':
108
- if (!args[1]) {
109
- console.error('❌ 请指定文件ID');
 
 
110
  break;
111
- }
112
- await service.initialize();
113
- const info = await service.getFileInfo(args[1]);
114
- console.log('📋 文件信息:');
115
- console.log(`📎 名称: ${info.name}`);
116
- console.log(`🆔 ID: ${info.id}`);
117
- console.log(`📊 类型: ${info.mimeType}`);
118
- console.log(`💾 大小: ${info.size || 'N/A'}`);
119
- console.log(`📅 创建时间: ${info.createdTime}`);
120
- console.log(`🔄 修改时间: ${info.modifiedTime}`);
121
- break;
122
-
123
- case 'test':
124
- await service.initialize();
125
- const testInfo = await service.testConnection();
126
- console.log('✅ 连接成功!');
127
- console.log(`👤 用户: ${testInfo.user.emailAddress}`);
128
- console.log(`📊 存储配额: ${testInfo.storageQuota.usage} / ${testInfo.storageQuota.limit}`);
129
- break;
130
-
131
- default:
132
- console.error(`❌ 未知命令: ${command}`);
133
- showUsage();
134
  }
135
- } catch (error) {
136
- console.error('❌ 操作失败:', error.message);
137
- process.exit(1);
138
- }
139
  }
140
 
141
  if (require.main === module) { main(); }
 
9
  /**
10
 
11
  显示使用帮助 */ function showUsage() { console.log(''); console.log('📁 Google Drive 文件夹专用客户端'); console.log('当前配置文件夹: fastoc'); console.log(''); console.log('📄 文件操作:'); console.log(' node folder-client.js list [数量] - 列出文件夹内文件'); console.log(' node folder-client.js upload <文件路径> - 上传文件到文件夹'); console.log(' node folder-client.js download <文件ID> - 下载文件'); console.log(' node folder-client.js delete <文件ID> - 删除文件'); console.log(' node folder-client.js mkdir <文件夹名> - 在当前文件夹下创建子文件夹'); console.log(' node folder-client.js search <搜索条件> - 在当前文件夹下搜索'); console.log(' node folder-client.js info <文件ID> - 获取文件信息'); console.log(' node folder-client.js test - 测试连接'); console.log(''); }
 
12
 
13
+ /**
14
+ * 格式化文件信息显示
15
+ */
16
+ function formatFileInfo(file) {
17
+ const size = file.size ? `${(parseInt(file.size) / 1024).toFixed(2)} KB` : 'N/A';
18
+ const type = file.mimeType.includes('folder') ? '📁' :
19
+ file.mimeType.includes('google-apps') ? '📄' : '📎';
20
+
21
+ return `${type} ${file.name}\nID: ${file.id}\n大小: ${size}\n修改时间: ${file.modifiedTime}\n`;
22
  }
23
 
24
+ async function main() {
25
+ const args = process.argv.slice(2);
26
 
27
+ if (args.length === 0) {
28
+ showUsage();
29
+ return;
30
+ }
31
+
32
+ const command = args[0];
33
+
34
+ // fastoc 文件夹 ID
35
+ const FASTOC_FOLDER_ID = '12TZDNL8qVBFdd8ej4lNM2IF8xFs3cKhH';
36
+ const service = new GoogleDriveOAuth2Service(FASTOC_FOLDER_ID);
37
+
38
+ try {
39
+ switch (command) {
40
+ case 'list':
41
+ await service.initialize();
42
+ const pageSize = args[1] ? parseInt(args[1]) : 10;
43
+ const result = await service.listFiles({ pageSize });
44
+
45
+ console.log(`📋 fastoc 文件夹内容 (${result.files.length} 个):`);
46
+ console.log('');
47
+ result.files.forEach((file, index) => {
48
+ console.log(`${index + 1}. ${formatFileInfo(file)}`);
49
+ });
50
+ break;
51
 
52
+ case 'upload':
53
+ if (!args[1]) {
54
+ console.error('❌ 请指定要上传的文件路径');
55
+ break;
56
+ }
57
+ await service.initialize();
58
+ const uploadResult = await service.uploadFile(args[1]);
59
+ console.log('✅ 文件上传成功!');
60
+ console.log(`📎 文件名: ${uploadResult.name}`);
61
+ console.log(`🆔 文件ID: ${uploadResult.id}`);
62
+ console.log(`🔗 链接: ${uploadResult.webViewLink}`);
 
 
 
 
 
 
 
 
 
 
 
 
63
  break;
64
+
65
+ case 'download':
66
+ if (!args[1]) {
67
+ console.error(' 请指定要下载的文件ID');
68
+ break;
69
+ }
70
+ await service.initialize();
71
+ const destPath = args[2] || './' + args[1] + '.downloaded';
72
+ const downloadResult = await service.downloadFile(args[1], destPath);
73
+ console.log('✅ 文件下载成功!');
74
+ console.log(`📎 文件名: ${downloadResult.fileName}`);
75
+ console.log(`💾 保存路径: ${downloadResult.destinationPath}`);
76
  break;
77
+
78
+ case 'delete':
79
+ if (!args[1]) {
80
+ console.error('❌ 请指定要删除的文件ID');
81
+ break;
82
+ }
83
+ await service.initialize();
84
+ await service.deleteFile(args[1]);
85
+ console.log('✅ 文件删除成功!');
 
 
 
86
  break;
87
+
88
+ case 'mkdir':
89
+ if (!args[1]) {
90
+ console.error(' 请指定文件夹名称');
91
+ break;
92
+ }
93
+ await service.initialize();
94
+ const folderResult = await service.createFolder(args[1]);
95
+ console.log(' 文件夹创建成功!');
96
+ console.log(`📁 文件夹名: ${folderResult.name}`);
97
+ console.log(`🆔 文件夹ID: ${folderResult.id}`);
98
+ console.log(`🔗 链接: ${folderResult.webViewLink}`);
99
  break;
100
+
101
+ case 'search':
102
+ if (!args[1]) {
103
+ console.error(' 请指定搜索条件');
104
+ break;
105
+ }
106
+ await service.initialize();
107
+ const searchResult = await service.listFiles({ query: args[1] });
108
+ console.log(`🔍 搜索结果 (${searchResult.files.length} 个):`);
109
+ console.log('');
110
+ searchResult.files.forEach((file, index) => {
111
+ console.log(`${index + 1}. ${formatFileInfo(file)}`);
112
+ });
113
  break;
114
+
115
+ case 'info':
116
+ if (!args[1]) {
117
+ console.error('❌ 请指定文件ID');
118
+ break;
119
+ }
120
+ await service.initialize();
121
+ const info = await service.getFileInfo(args[1]);
122
+ console.log('📋 文件信息:');
123
+ console.log(`📎 名称: ${info.name}`);
124
+ console.log(`🆔 ID: ${info.id}`);
125
+ console.log(`📊 类型: ${info.mimeType}`);
126
+ console.log(`💾 大小: ${info.size || 'N/A'}`);
127
+ console.log(`📅 创建时间: ${info.createdTime}`);
128
+ console.log(`🔄 修改时间: ${info.modifiedTime}`);
129
  break;
130
+
131
+ case 'test':
132
+ await service.initialize();
133
+ const testInfo = await service.testConnection();
134
+ console.log('✅ 连接成功!');
135
+ console.log(`👤 用户: ${testInfo.user.emailAddress}`);
136
+ console.log(`📊 存储配额: ${testInfo.storageQuota.usage} / ${testInfo.storageQuota.limit}`);
137
+ break;
138
+
139
+ default:
140
+ console.error(`❌ 未知命令: ${command}`);
141
+ showUsage();
142
+ }
143
+ } catch (error) {
144
+ console.error('❌ 操作失败:', error.message);
145
+ process.exit(1);
 
 
 
 
 
 
 
146
  }
 
 
 
 
147
  }
148
 
149
  if (require.main === module) { main(); }