"> "> ">
export function uploadFile(file: File, progressObj?: any) {
return new Promise<IOSSFile>((rsv, rej) => {
if (progressObj) {
progressObj.ready = false;
progressObj.progress = 0;
}
let totalSize = file.size; // 文件总大小
let lastUploadedSize = 0; // 上一次回调时已上传的大小
let lastTime = new Date().getTime(); // 上一次回调的时间
let hasShownInitialSpeed = false; // 控制初始网速显示
let task: any;
let data = {
platform: "h5",
options: {
file: file,
config: {
image: {
compress: false,
},
},
progress(val: number) {
let percent = val / 100;
let currentUploadedSize = percent * totalSize; // 当前已上传的大小
let currentTime = new Date().getTime(); // 当前时间
let deltaSize = currentUploadedSize - lastUploadedSize; // 本次回调上传的数据量
let deltaTime = (currentTime - lastTime) / 1000; // 时间差,以秒为单位
// 确保不会出现为 0 的网速
if (!hasShownInitialSpeed && deltaSize > 0 && deltaTime > 0) {
let initialSpeedBps = deltaSize / deltaTime / 8; // 初次网速,单位为 bps(比特/秒)
let initialSpeedKbps = initialSpeedBps / 1024; // 转换为 Kbps
let initialSpeedMbps = initialSpeedKbps / 1024; // 转换为 Mbps
let initialSpeed = initialSpeedMbps > 1
? initialSpeedMbps.toFixed(2) + ' MB/s' // 如果大于 1 Mbps,显示为 Mbps
: initialSpeedKbps.toFixed(2) + ' KB/s'; // 否则显示为 Kbps
// console.log(`初始上传速度: ${initialSpeed}`);
if (progressObj) {
progressObj.ready = true;
progressObj.speedMbps = initialSpeed;
}
hasShownInitialSpeed = true;
}
// 每 500ms 更新上传速度
if (deltaTime > 0.5) {
let speedBps = deltaSize / deltaTime / 8; // 当前速度,单位为 bps(比特/秒)
let speedKbps = speedBps / 1024; // 转换为 Kbps
let speedMbps = speedKbps / 1024; // 转换为 Mbps
let speed = speedMbps > 1
? speedMbps.toFixed(2) + ' MB/s' // 如果大于 1 Mbps,显示为 Mbps
: speedKbps.toFixed(2) + ' KB/s'; // 否则显示为 Kbps
if (progressObj) {
progressObj.ready = true;
progressObj.speedMbps = speed;
}
lastUploadedSize = currentUploadedSize;
lastTime = currentTime;
}
if (progressObj) {
// console.log(task.client, 'task');
progressObj.ready = true;
console.log(val, '进度')
progressObj.progress = val;
}
},
success(res: IOSSFile) {
rsv(res);
},
fail(res: any) {
rej(res);
},
},
};
task = new xgjzt.oss.OssClass(data);
if (progressObj) {
progressObj.cancel = function () {
task.cancel();
};
progressObj.pause = function () {
task.pause();
};
progressObj.resume = function () {
task.resume();
};
}
});
}