h5在网页中上传超大文件教程实例


当前第2页 返回上一页

利用HTML5分片上传超大文件

可以看到构造出来的Content-Type是multipart/form-data,也就是符合RFC标准的那个最传统的文件上传表单。另外我们同时传输的name、total等属性也都在表单里。

然后是服务端,没什么新鲜的,完全是在接收一个普通的文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

[HttpPost]

public ActionResult Upload()

{

    //从Request中取参数,注意上传的文件在Requst.Files中

    string name = Request["name"];

    int total = Convert.ToInt32(Request["total"]);

    int index = Convert.ToInt32(Request["index"]);

    var data = Request.Files["data"];

    

    //保存一个分片到磁盘上

    string dir = Server.MapPath("~/Upload");

    string file = Path.Combine(dir, name + "_" + index);

    data.SaveAs(file);

    

    //如果已经是最后一个分片,组合

    //当然你也可以用其它方法比如接收每个分片时直接写到最终文件的相应位置上,但要控制好并发防止文件锁冲突

    if(index == total)

    {

        file = Path.Combine(dir, name);

        var fs = new FileStream(file, FileMode.Create);

        for(int i = 1;i <= total;++i)

        {

            string part = Path.Combine(dir, name + "_" + i);

            var bytes = System.IO.File.ReadAllBytes(part);

            fs.Write(bytes, 0, bytes.Length);

            bytes = null;

            System.IO.File.Delete(part);

        }

        fs.Close();

    }

    

    //返回是否成功,此处做了简化处理

    return Json(new { Error = 0 });

}

上面的DEMO很多问题是简化处理的,比如没做什么异常处理,客户端也没有判断服务端是否出错重试一类的,各位可以自己完善。

在上面的基础上,我们可以做很多功能上的扩展,比如我们可以控制所有分片是顺序上传还是并发上传,以适用不同应用。再比如我们可以在整体文件上传前以及分片上传前都先计算一下相应的HASH,发个请求询问服务器文件是否已存在,如果存在就不要重复上传了,这样就实现了“极速上传”以及“断点续传”

【相关推荐】

1. 免费h5在线视频教程

2. HTML5 完整版手册

3. php.cn原创html5视频教程

以上就是h5在网页中上传超大文件教程实例的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

html5实现文字轮滚的示例代码

后盾网html5视频教程

总结html5的新特性(面试必备)

让ie支持html5的方法

秀野堂html5入门视频教程的资源推荐

h5 video标签用法的实例代码

html5中关于新增的几个背景属性和文本属性介绍

web sql数据库的使用教程

html5头部 meta介绍

html5中返回音视频的当前媒体控制器的属性controller

更多相关阅读请进入《h5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...