⚡ 优化传输进度显示.
This commit is contained in:
@@ -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>
|
||||||
<!-- 目标目录 -->
|
<!-- 目标目录 -->
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user