优化传输进度显示.

This commit is contained in:
lijiahang
2024-04-16 10:55:08 +08:00
parent 73537d8671
commit e3fd75e570
3 changed files with 28 additions and 5 deletions

View File

@@ -48,7 +48,7 @@
<span>{{ getFileSize(item.totalSize) }}</span> <span>{{ getFileSize(item.totalSize) }}</span>
<!-- 进度百分比 --> <!-- 进度百分比 -->
<span class="ml8" v-if="item.status === TransferStatus.TRANSFERRING"> <span class="ml8" v-if="item.status === TransferStatus.TRANSFERRING">
{{ (item.currentSize / item.totalSize * 100).toFixed(2) }}% {{ item.progress }}%
</span> </span>
</span> </span>
<!-- 目标目录 --> <!-- 目标目录 -->

View File

@@ -15,6 +15,8 @@ export default class SftpTransferManager implements ISftpTransferManager {
private run: boolean; private run: boolean;
private progressId?: number;
private currentItem?: SftpTransferItem; private currentItem?: SftpTransferItem;
private currentUploader?: ISftpTransferUploader; private currentUploader?: ISftpTransferUploader;
@@ -39,6 +41,7 @@ export default class SftpTransferManager implements ISftpTransferManager {
name: s.webkitRelativePath || s.name, name: s.webkitRelativePath || s.name,
currentSize: 0, currentSize: 0,
totalSize: s.size, totalSize: s.size,
progress: 0,
status: TransferStatus.WAITING, status: TransferStatus.WAITING,
parentPath: parentPath, parentPath: parentPath,
file: s file: s
@@ -63,6 +66,7 @@ export default class SftpTransferManager implements ISftpTransferManager {
parentPath: currentPath, parentPath: currentPath,
currentSize: 0, currentSize: 0,
totalSize: s.size, totalSize: s.size,
progress: 0,
status: TransferStatus.WAITING, status: TransferStatus.WAITING,
}; };
}) as Array<SftpTransferItem>; }) as Array<SftpTransferItem>;
@@ -111,20 +115,30 @@ export default class SftpTransferManager implements ISftpTransferManager {
}).forEach(s => { }).forEach(s => {
s.status = TransferStatus.ERROR; s.status = TransferStatus.ERROR;
}); });
// 关闭会话重置 run // 关闭会话
this.run = false; this.close();
return; return;
} }
// 关闭会话
this.client.onclose = event => { this.client.onclose = event => {
// 关闭会话重置 run
this.run = false;
console.warn('transfer close', event); console.warn('transfer close', event);
this.close();
}; };
// 处理消息
this.client.onmessage = this.resolveMessage.bind(this); this.client.onmessage = this.resolveMessage.bind(this);
// 计算传输进度
this.progressId = setInterval(this.calcProgress.bind(this), 500);
// 打开后自动传输下一个任务 // 打开后自动传输下一个任务
this.transferNextItem(); this.transferNextItem();
} }
// 计算传输进度
private calcProgress() {
this.transferList.forEach(item => {
item.progress = (item.currentSize / item.totalSize * 100).toFixed(2);
});
}
// 传输下一条任务 // 传输下一条任务
private transferNextItem() { private transferNextItem() {
this.currentUploader = undefined; this.currentUploader = undefined;
@@ -247,4 +261,12 @@ export default class SftpTransferManager implements ISftpTransferManager {
this.transferNextItem(); this.transferNextItem();
} }
// 关闭 释放资源
private close() {
// 重置 run
this.run = false;
// 关闭传输进度
clearInterval(this.progressId);
}
} }

View File

@@ -441,6 +441,7 @@ export interface SftpTransferItem {
parentPath: string; parentPath: string;
currentSize: number, currentSize: number,
totalSize: number; totalSize: number;
progress: number | string;
status: string; status: string;
errorMessage?: string; errorMessage?: string;
file: File; file: File;