利用HTML5分片上传超大文件

<!DOCTYPE html>

<html lang="zh-CN">

<head>

    <meta charset="utf-8">

    <title>HTML5大文件分片上传示例</title>

    <script src="../Scripts/jquery-1.11.1.min.js"></script>

    <script>

    var page = {

        init: function(){

            $("#upload").click($.proxy(this.upload, this));

        },

         

        upload: function(){

            var file = $("#file")[0].files[0],  //文件对象

                name = file.name,        //文件名

                size = file.size,        //总大小

                succeed = 0;

                  

            var shardSize = 2 * 1024 * 1024,     //以2MB为一个分片

                shardCount = Math.ceil(size / shardSize);   //总片数

                  

            for(var i = 0;i < shardCount;++i){

                //计算每一片的起始与结束位置

                var start = i * shardSize,

                    end = Math.min(size, start + shardSize);

 

                //构造一个表单,FormData是HTML5新增的

                var form = new FormData();

                form.append("data", file.slice(start,end));  //slice方法用于切出文件的一部分

                form.append("name", name);

                form.append("total", shardCount);   //总片数

                form.append("index", i + 1);        //当前是第几片

                 

                //Ajax提交

                $.ajax({

                    url: "../File/Upload",

                    type: "POST",

                    data: form,

                    async: true,         //异步

                    processData: false,  //很重要,告诉jquery不要对form进行处理

                    contentType: false,  //很重要,指定为false才能形成正确的Content-Type

                    success: function(){

                        ++succeed;

                        $("#output").text(succeed + " / " + shardCount);

                    }

                });

            }

        }

    };

    $(function(){

        page.init();

    });

    </script>

</head>

<body>

    <input type="file" id="file" />

    <button id="upload">上传</button>

    <span id="output" style="font-size:12px">等待</span>

</body>

</html>

转载于:https://my.oschina.net/u/3449950/blog/1791894

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ElementUI 是一套基于 Vue.js 的组件库,它提供了丰富的 UI 组件来构建 Web 应用程序。要实现文件分片上传,我们可以利用 ElementUI 中的 Upload 组件配合一些其他的技术来实现。 首先,我们需要在页面中引入 ElementUI 的样式以及相关的 JavaScript 文件。然后,我们可以使用 ElementUI 的 Upload 组件创建一个文件上传的区域。 在 Upload 组件中,我们需要设置一些参数来实现文件分片上传。具体包括以下几个参数: 1. `action`:指定上传的 API 接口,需要根据后端的实际接口进行配置。 2. `headers`:设置请求头,常见的有 token 等认证信息。 3. `auto-upload`:设置为 false,禁用自动上传,我们需要手动控制上传过程。 4. `multiple`:是否支持多文件上传。 5. `on-success`:上传成功后的回调函数,可以在这里处理上传成功后的逻辑。 接下来,我们需要使用 JavaScript 来实现文件分片上传。可以使用 FileReader 对象来读取文件,使用 Blob 对象来切分文件。然后,我们可以利用 XMLHttpRequest 对象来发送分片请求,并监听其上传进度。 在每个分片上传成功后,我们需要记录已上传分片,并检查是否需要继续上传下一个分片。当所有分片上传完成后,我们可以调用后端接口来进行文件的合并。 需要注意的是,文件分片上传涉及到文件切分、上传进度的监听、文件合并等复杂的操作,需要在前端和后端共同配合完成。 总之,通过结合 ElementUI 的 Upload 组件和其他相关技术,我们可以实现文件分片上传功能,提高文件上传的效率和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值