qq_43033533 2022-07-24 19:44 采纳率: 66.7%
浏览 25
已结题

JavaScript分片上传如何监听进度?

如何监听分块上传进度

JavaScript方法完整代码

function gisModelUpload() {
    // 接口名
    var interfaceName = $("#modelFileType").val();
    // url地址
    var url = $("#url").val();
    // token
    var token = $("#token").val();
    // 大文件切块
    var bytesPerPiece = 2048 * 4096; // 每个文件切片大小定为8MB
    var totalPieces; //总数
    var blob = document.getElementById("modelFile").files[0];
    var start = 0;
    var end;
    var index = 0; //分块索引
    var filesize = blob.size;
    var filename = blob.name;
    var parameter = {
        Name: "name",
        LightweightName: "",
        InitiatingUser: "admin",
        UniqueCode: "customize",
        Priority: "202",
        ModelUploadUrl: "",
        OtherInfo: "",
    };
    //计算文件切片总数
    totalPieces = Math.ceil(filesize / bytesPerPiece);
    while (start < filesize) {
        end = start + bytesPerPiece;
        if (end > filesize) {
            end = filesize;
        }
        var chunk = blob.slice(start, end); //切割文件chunk=>分块文件流
        var formData = new FormData();
        formData.append("file", chunk, filename);
        formData.append("chunk", index);
        formData.append("chunks", totalPieces);
        formData.append("input", JSON.stringify(parameter));
        var settings = {
            url: "http://" + url + interfaceName,
            method: "POST",
            timeout: 0,
            async: false,
            headers: {
                Token: token,
            },
            processData: false,
            mimeType: "multipart/form-data",
            contentType: false,
            data: formData,
            // 监听上传状态
            xhr: function () {
                var xhr = new XMLHttpRequest();
                xhr.upload.addEventListener("progress", function (e) {
                    var progressRate = (e.loaded / e.total) * 100 + "%";
                    console.log(e.loaded);
                    $("#plan").css("width", progressRate);
                });
                
                return xhr;
            },
        };
        $.ajax(settings).done(function (response) {
            $("#modelUploadFile").modal("hide");
            var uploadResult = JSON.parse(response);
            parameter.LightweightName = uploadResult.datas.lightweightName;
            console.log(uploadResult);
            var datas = uploadResult.datas;
            var pageResult = document.getElementById("resultOutput");
            pageResult.innerHTML = JSON.stringify(datas);
        });
        start = end;
        index++;
    }
}

监听没数据,普通上传好的,分块上传该如何监听呢?

// 监听上传状态

            xhr: function () {
                var xhr = new XMLHttpRequest();
                xhr.upload.addEventListener("progress", function (e) {
                    var progressRate = (e.loaded / e.total) * 100 + "%";
                    console.log(e.loaded);
                    $("#plan").css("width", progressRate);
                });
                
                return xhr;
            }

  • 写回答

1条回答 默认 最新

  • 叫我虫虫吧 2022-07-25 14:08
    关注

    还是建议,进度这个事情让后端返回的好,不建议这样折腾

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月12日
  • 已采纳回答 8月4日
  • 创建了问题 7月24日

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行