js获取文件实时上传进度,制作文件上传进度条

一、需求

根据文件上传的实时进展,向用户展示上传进度,方便用户知道文件上传状态及大概时间,如进度条展示

二、原理

核心是对文件上传进度的监听,在前端通过ajax发送请求,可以对XMLHttpRequest.upload的onprogress事件进行监听,从loaded属性中获取已上传的文件大小,以此实时改变进度条的宽度

获取上传文件的总大小实时的已上传大小,即可展示文件上传实时进度

三、代码示例

1、接口代码展示

// 上传文件的接口
upLoad(file, callback) {
    return http({
        url: `/resource/upload`,
        method: "post",
        data: file,
        // 原生获取上传进度的事件
        onUploadProgress: e => {
            if (e.lengthComputable) {
                callback && callback(e);
            }
        },
    })
},
  • file 上传的文件(需要上传的文件)、
  • callback 需要执行的回调函数(获取上传进度)、
  • onUploadProgress 监听上传进度事件(ajax请求自带的方法)

2、JS代码展示

 // 上传文件
const getUp = async (file) => {
    let formData = new FormData();
    formData.append("file", file);
    const { data } = await upLoad(formData, onUploadProgress);
    if (data.code === 200) {
        console.log("上传成功")
    } else {
        console.log("上传失败")
    }
};


// 获取上传文件进度的回调函数
const onUploadProgress = (e) => {
    实时文件上传进度的百分比 = parseInt((e.loaded / e.total) * 100);
};
  • formData 接口所需参数
  • onUploadProgress 获取文件上传数据的函数(处理数据获取文件上传进度)
  • e 上传进度事件相关数据(可以打印出来看一下)

其他拓展: 

四、原理参考

原生XMLHttpRequest 使用方法:超级简单的文件上传进度条实现_呆呆papa的博客-CSDN博客

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 JavaScript 文件实时进度,可以通过以下步骤来实现: 1. 使用 HTML 创建一个文件表单,包括一个 `<input type="file">` 的文件选择框和一个进度条来显示上进度。 2. 在 JavaScript 中获取文件表单的 DOM 元素,并为文件选择框绑定一个 "change" 事件监听器。 3. 在事件监听器中,获取用户选择的文件,并使用 XMLHttpRequest 对象来发送文件到服务器。 4. 为 XMLHttpRequest 对象绑定 "progress" 事件监听器,以实时监听上进度。 5. 在 "progress" 事件监听器中,通过 `event.loaded` 和 `event.total` 属性来获取当前已经上的字节数和总字节数。根据这些值计算上进度的百分比,并将其更新到进度条上。 6. 如果上完成,则将进度条设置为 100%。 以下是代码示例: HTML: ```html <input type="file" id="fileInput"> <progress id="progressBar" max="100" value="0"></progress> ``` JavaScript: ```javascript const fileInput = document.getElementById('fileInput'); const progressBar = document.getElementById('progressBar'); fileInput.addEventListener('change', (event) => { const file = event.target.files[0]; const xhr = new XMLHttpRequest(); xhr.upload.addEventListener('progress', (event) => { if (event.lengthComputable) { const percentComplete = (event.loaded / event.total) * 100; progressBar.value = percentComplete; } }); xhr.onreadystatechange = () => { if (xhr.readyState === 4 && xhr.status === 200) { progressBar.value = 100; } }; xhr.open('POST', '/upload', true); xhr.send(file); }); ``` 上述示例代码实现了一个简单的文件进度实时更新的功能。其中,`/upload` 是服务器端处理文件的接口地址,你需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值