通过前面两篇的分享,我们已经搞定了单个文件的普通的上传,包括文件预览,图片预览,上传速度等前端界面的显示,这次我们来谈谈关于>XMLHttpRequest2.0在界面之后假如才用分片上传能做到一些什么功能

关于分片上传

为什么要使用分片上传?

考虑如下场景,假如用户需要在一个视频分享社区上传一部.avi的视频文件进行分享,大小在2G以上,这个时候用户假如在上传的过程当中,发生了宽带掉线,不小心关闭了浏览器等这种意外的事情,用户这个时候除了重传整个文件以外,没有其他更好的选择,可能用户就不会考虑再次进行上传了,这个社区因此可能就这么丢掉了一个优质用户。假如才用分片上传则可以有效的避免这个问题。另外大量的第三方云存储实际上也是有做接受的文件大小限制的。

什么是分片上传?

分片上传的意思实际上就是把一个大文件进行分割,一个视频文件就好比是一个非常大的数组文件,分片就是把这个数组分割成N个小的数组,我们把分片之后的小文件一个个的上传到服务器,服务器在对分片的文件进行重组,从而得到一个完整的视频文件。

分片上传的优势

采用文件分片上传,有哪些优势呢?

  • 更强的容错能力

    采用分片上传可以大大减少重传的情况,把一个大文件进行分片上传之后就算当前这个分片在上传的过程中出现了什么意外,用户也只需要重新上传当前的这个分片,而不用将整个文件进行上传。

  • 可以模拟出暂停和继续功能

    使用了分片上传,当用户点击暂停的时候终断当前这一片文件的上传,当用户点击继续的时候可以继续从当前上传的这一片文件开始上传

  • 可以断点续传

    使用分片上传后,当用户关闭电脑,下次在登录网页的时候我们可以通过把当前正在上传的分片的id以及通过对文件的md5的方式序列化文件得到唯一的key存在本地,用户打开上传页面就可以直接读取当前分片的位置继续进行上传。

  • 关于秒传

    我们既然能够通过对碎片文件进行MD5的序列化,那么我们是否还可以考虑对整个文件进行序列化,和服务器那边的文件进行对比,这样假如服务器那边已经存在了一个相同的文件,我们就可以直接实现秒传文件了。

怎么进行分片上传

分片上传这么多好处,那怎么进行分片上传呢?

function upload(){
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)); //file对象的slice方法用于切出文件的一部分 form.append("name", name); form.append("total", shardCount); //总片数 form.append("index", i + 1); //当前是第几片 //Ajax提交 $.ajax({ url: "../File/Upload", type: "POST", data: form, //刚刚构建的form数据对象 async: true, //异步 processData: false, //很重要,告诉jquery不要对form进行处理 contentType: false, //很重要,指定为false才能形成正确的Content-Type success: function(){
//当前这一片上传成功显示进度
++succeed;
$("#output").text(succeed + " / " + shardCount);
}
}); }
}

上面这些代码就可以简单的实现一个分片上传文件的前端处理了,当然还有许多东西需要做比如暂停,假如还需要进行多文件的分片上传,断点续传等等这么写,那还得继续写写写写很多这种低层的方法。这里推荐使用一个叫做Plupload的上传组件,这个组件很强大,有如下特点:

  1. 有多种上传方式,HTML5、flash、silverlight以及传统的input type=file,Plupload会自动检测当前的浏览器环境,切换到最合适的上传方式,
  2. 支持拖拽上传
  3. 支持前端的图片压缩
  4. 支持文件信息的读取
  5. 支持分片上传

通过Plupload我们就不需要关心上传过程中这些底层处理,只需要实例化Plupload对象就可以使用他给我们提供的各种事件,方法,属性等。

关于Plupload的具体使用方法可以参考 http://www.cnblogs.com/2050/p/3913184.html

HTML5关于上传API的一些使用(下)的更多相关文章

  1. HTML5关于上传API的一些使用(上)

    HTML5提供了很多有用的API,其中就包括上传的API,XMLHttpRequest2.0,在HTML5时代之前,需要进行二进制的上传一般都会才用flash的方案,但是当XMLHttpRequest ...

  2. HTML5关于上传API的一些使用(中)

    上一次写了关于HTML的上传API,XMLHttpRequest2.0的上传方式,以及HTML5中上传之前本地的预览,包括对于图片以及部分信息的预 览.这次我们就讲下HTML5中关于上传的一些各种个性 ...

  3. AJAX文件上传实践与分析,带HTML5文件上传API。

    对于HTML5已经支持AJAX文件上传了,但如果需要兼容的话还是得用一点小技巧的,HTML5等等介绍,先来看看以前我们是怎么写的. 网上可能会有一些叫AJAX文件上传插件,但在AJAX2.0之前是不可 ...

  4. html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

    以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上 ...

  5. HTML5文件上传还有进度条

    以下是自学it网--中级班上课笔记 网址:www.zixue.it 需要在chrome,ff,IE10下运行 html页面 <!DOCTYPE html> <html lang=&q ...

  6. 基于HT for Web矢量实现HTML5文件上传进度条

    在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传.上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件 ...

  7. 【Demo】HTML5 拍照上传

    本文主要讲解 手机浏览器 如何拍照 为什么会有这个需求 最近做一个项目要用到拍照然后上传照片,但是网页拍照一般都是用Flash做的,而我们主要是H5页面,如果在微信里面有权限就可以通过JSSDK调起摄 ...

  8. html5文件上传

    <!DOCTYPE html><html><head> <title>Html5 Ajax 上传文件</title></head> ...

  9. HTML5 图片上传预览

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

随机推荐

  1. Voice Commands (VCD) Cortana 微软小娜示例

    Cortana 样品 您可以创建自定义功能Cortana使用Cortana技能装备或遗留的声音命令(VCD)平台. 在这里,你可以找到相关的样品: Cortana技能装备 目前Cortana技巧是建立 ...

  2. 使用javascript开发的视差滚动效果的云彩

    在线演示 jquery.parallax.js是一款能够帮助你快速开发视差效果的jQuery插件,在这里我们使用它来开发一款漂亮的云朵视差效果. 主要代码: Javascript ........ 阅 ...

  3. Discuz常见小问题-如何设置163邮箱注册验证

    参考网址: https://jingyan.baidu.com/album/c843ea0b804a6e77931e4aa7.html?picindex=3 http://www.discuz.net ...

  4. 算法笔记_043:最大连续子数组和(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力枚举法 2.2 动态规划法   1 问题描述 给定一个整数数组,数组里可能有正数.负数和零.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和 ...

  5. apk签名相关文章

    签名详解:https://stackoverflow.com/questions/4245303/android-sf-file 使用不同的keystore,签名后生成SF文件一模一样正常吗? 正常 ...

  6. 企业版证书打包APP发布,安装后闪退问题解决。

    企业版证书打包APP发布,安装后闪退问题解决. 我现在就碰到这个问题,只要项目与Swift沾上边的,都会出问题. 如果我们是直接使用开发者证书进行真机调试,那么就不会出现问题,像往常一样好.但如果我们 ...

  7. 超级干货,python常用函数大总结

    我们在学习python的时候,接触最多的往往则是那些函数,对于python函数,在这里为大家总结归纳了这些,如果有缺漏,还请及时留言指正哦! 话不多说,干货来袭! 1.常用内置函数:(不用import ...

  8. bzoj-4003 城池攻占

    题意: 给出一个n个结点的有根树,和m个骑士: 树上的结点--城池有一个防御值,骑士有一个战斗力: 当骑士的战斗力大于等于城池时,城池被攻破.骑士的战斗力变化,并向树上的父节点前进: 否则骑士死亡. ...

  9. 和求余运算巧妙结合的jns指令

    .text:004A78B1  and eax, 80000001h.text:004A78B6  jns short loc_4A78BD.text:004A78B8 dec eax.text:00 ...

  10. SQLyog之MySQL客户端的下载、安装和使用(企业版)(破解)

    本博文的主要内容有 .SQLyog的下载 .SQLyog的安装 .SQLyog的使用 1.SQLyog_Enterprise的下载 比如,我这里,是放在D:\SoftWare 继续