Files
AUTO-MAS-test/frontend/electron/services/downloadService.ts
AoXuan ae151a9311 feat(initialization): 添加初始化页面和相关功能
- 新增初始化页面组件和路由
- 实现环境检查、Git下载、后端代码克隆等功能
- 添加下载服务和环境服务模块
- 更新类型定义,增加 Electron API 接口
2025-08-07 00:11:29 +08:00

58 lines
1.6 KiB
TypeScript

import * as https from 'https'
import * as fs from 'fs'
import { BrowserWindow } from 'electron'
let mainWindow: BrowserWindow | null = null
export function setMainWindow(window: BrowserWindow) {
mainWindow = window
}
// 下载文件的通用函数
export function downloadFile(url: string, outputPath: string): Promise<void> {
return new Promise((resolve, reject) => {
console.log(`开始下载文件: ${url}`)
console.log(`保存路径: ${outputPath}`)
const file = fs.createWriteStream(outputPath)
https.get(url, (response) => {
const totalSize = parseInt(response.headers['content-length'] || '0', 10)
let downloadedSize = 0
console.log(`文件大小: ${totalSize} bytes`)
response.pipe(file)
response.on('data', (chunk) => {
downloadedSize += chunk.length
const progress = Math.round((downloadedSize / totalSize) * 100)
console.log(`下载进度: ${progress}% (${downloadedSize}/${totalSize})`)
if (mainWindow) {
mainWindow.webContents.send('download-progress', {
progress,
status: 'downloading',
message: `下载中... ${progress}%`
})
}
})
file.on('finish', () => {
file.close()
console.log(`文件下载完成: ${outputPath}`)
resolve()
})
file.on('error', (err) => {
console.error(`文件写入错误: ${err.message}`)
fs.unlink(outputPath, () => {}) // 删除不完整的文件
reject(err)
})
}).on('error', (err) => {
console.error(`下载错误: ${err.message}`)
reject(err)
})
})
}