feat(remote): 实现文件下载真实进度显示
- 下载改用流式读取,计算真实进度百分比 - 通过 IPC 事件实时推送进度到前端 - 支持 Content-Length 计算下载进度
This commit is contained in:
@@ -119,13 +119,31 @@ export const downloadFileFromRemote = async (
|
||||
password?: string,
|
||||
onProgress?: (progress: number) => void
|
||||
): Promise<void> => {
|
||||
onProgress?.(50)
|
||||
const result = await window.electronAPI.remoteDownloadFile(serverHost, port, fileName, remotePath, localPath, password)
|
||||
onProgress?.(100)
|
||||
if (!result.success) {
|
||||
if (result.canceled) {
|
||||
return
|
||||
const transferId = Date.now().toString()
|
||||
|
||||
const cleanup = window.electronAPI?.onDownloadProgress?.((data) => {
|
||||
if (data.id === transferId) {
|
||||
onProgress?.(data.progress)
|
||||
}
|
||||
throw new Error(result.error || 'Download failed')
|
||||
})
|
||||
|
||||
try {
|
||||
const result = await window.electronAPI.remoteDownloadFile(
|
||||
transferId,
|
||||
serverHost,
|
||||
port,
|
||||
fileName,
|
||||
remotePath,
|
||||
localPath,
|
||||
password
|
||||
)
|
||||
if (!result.success) {
|
||||
if (result.canceled) {
|
||||
return
|
||||
}
|
||||
throw new Error(result.error || 'Download failed')
|
||||
}
|
||||
} finally {
|
||||
cleanup?.()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user