|
|
#!/usr/bin/env node |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const path = require('path'); |
|
|
const fs = require('fs'); |
|
|
|
|
|
|
|
|
process.env.GDRIVE_SERVICE_PATH = '/.system/service/gdrive'; |
|
|
|
|
|
|
|
|
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}`); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async function uploadSampleFile() { |
|
|
try { |
|
|
|
|
|
const sampleFileName = `example_${Date.now()}.txt`; |
|
|
const sampleFilePath = path.join(process.cwd(), sampleFileName); |
|
|
|
|
|
|
|
|
createSampleFile(sampleFilePath); |
|
|
|
|
|
console.log('开始上传到 Google Drive...'); |
|
|
|
|
|
|
|
|
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'); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async function uploadSpecificFile(filePath, folderId = null) { |
|
|
try { |
|
|
if (!fs.existsSync(filePath)) { |
|
|
console.error(`文件不存在: ${filePath}`); |
|
|
return; |
|
|
} |
|
|
|
|
|
console.log(`上传文件: ${filePath}`); |
|
|
|
|
|
|
|
|
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 |
|
|
}; |
|
|
|