"> "> ">
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();
      };
    }
  });
}