File size: 5,393 Bytes
6c277ab
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/usr/bin/env node

/**
 * Google Drive 文件上传示例脚本
 * 演示如何使用 /.system/service/gdrive 中的脚本上传文件
 */

const path = require('path');
const fs = require('fs');

// 设置环境变量指向 gdrive 服务目录
process.env.GDRIVE_SERVICE_PATH = '/.system/service/gdrive';

// 导入 gdrive-hf 模块 (支持 HuggingFace Space 环境变量)
const gdriveModule = require(path.join(process.env.GDRIVE_SERVICE_PATH, 'gdrive-hf.js'));

/**
 * 创建示例文件
 */
function createSampleFile(filePath) {
    const content = `这是一个示例文件,用于测试 Google Drive 上传功能。

创建时间: ${new Date().toLocaleString('zh-CN')}
文件路径: ${filePath}
测试内容: Google Drive API 上传示例

此文件由 /.system/script/upload-example.js 自动生成。
`;

    fs.writeFileSync(filePath, content, 'utf8');
    console.log(`示例文件已创建: ${filePath}`);
}

/**
 * 上传示例文件到 Google Drive
 */
async function uploadSampleFile() {
    try {
        // 示例文件路径
        const sampleFileName = `example_${Date.now()}.txt`;
        const sampleFilePath = path.join(process.cwd(), sampleFileName);
        
        // 创建示例文件
        createSampleFile(sampleFilePath);
        
        console.log('开始上传到 Google Drive...');
        
        // 调用 gdrive 模块的 uploadFile 函数
        const result = await gdriveModule.uploadFile(sampleFilePath);
        
        if (result) {
            console.log('\n=== 上传成功 ===');
            console.log('文件 ID:', result.id);
            console.log('文件名:', result.name);
            console.log('文件大小:', result.size, '字节');
            console.log('查看链接:', result.webViewLink);
            
            // 清理本地示例文件
            fs.unlinkSync(sampleFilePath);
            console.log(`\n本地示例文件已删除: ${sampleFilePath}`);
        }
        
    } catch (error) {
        console.error('上传失败:', error.message);
        
        // 提供错误解决建议
        if (error.message.includes('环境变量') || error.message.includes('GOOGLE_')) {
            console.log('\n建议解决方案:');
            console.log('1. 在 HuggingFace Space 的 Settings > Environment Variables 中设置:');
            console.log('   - GOOGLE_CLIENT_ID: Google OAuth 客户端 ID');
            console.log('   - GOOGLE_CLIENT_SECRET: Google OAuth 客户端密钥');
            console.log('   - GOOGLE_REFRESH_TOKEN: Google OAuth 刷新令牌');
            console.log('2. 运行检查配置: cd /.system/service/gdrive && node gdrive-hf.js check');
        }
    }
}

/**
 * 上传指定文件到 Google Drive
 * @param {string} filePath - 要上传的文件路径
 * @param {string} folderId - 目标文件夹 ID (可选)
 */
async function uploadSpecificFile(filePath, folderId = null) {
    try {
        if (!fs.existsSync(filePath)) {
            console.error(`文件不存在: ${filePath}`);
            return;
        }
        
        console.log(`上传文件: ${filePath}`);
        
        // 调用 gdrive 模块的 uploadFile 函数
        const result = await gdriveModule.uploadFile(filePath, folderId);
        
        if (result) {
            console.log('\n=== 上传成功 ===');
            console.log('文件 ID:', result.id);
            console.log('文件名:', result.name);
            console.log('文件大小:', result.size, '字节');
            console.log('查看链接:', result.webViewLink);
        }
        
    } catch (error) {
        console.error('上传失败:', error.message);
    }
}

/**
 * 显示使用说明
 */
function showUsage() {
    console.log('使用方法:');
    console.log('  node upload-example.js                    - 上传示例文件');
    console.log('  node upload-example.js <文件路径>         - 上传指定文件');
    console.log('  node upload-example.js <文件路径> <文件夹ID> - 上传到指定文件夹');
    console.log('');
    console.log('示例:');
    console.log('  node upload-example.js');
    console.log('  node upload-example.js ./test.txt');
    console.log('  node upload-example.js ./document.pdf 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms');
    console.log('');
    console.log('注意:');
    console.log('1. 需要在 HuggingFace Space 环境变量中设置 Google Drive 凭据');
    console.log('2. 检查配置: cd /.system/service/gdrive && node gdrive-hf.js check');
    console.log('3. 环境变量: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKEN');
}

// 主函数
async function main() {
    const args = process.argv.slice(2);
    
    if (args.length === 0) {
        // 没有参数,上传示例文件
        await uploadSampleFile();
    } else if (args.length === 1) {
        // 上传指定文件
        await uploadSpecificFile(args[0]);
    } else if (args.length === 2) {
        // 上传到指定文件夹
        await uploadSpecificFile(args[0], args[1]);
    } else {
        console.error('参数错误');
        showUsage();
    }
}

// 如果直接运行此脚本
if (require.main === module) {
    main().catch(error => {
        console.error('程序执行失败:', error.message);
        process.exit(1);
    });
}

module.exports = {
    uploadSampleFile,
    uploadSpecificFile,
    createSampleFile
};