前端上传大型文件或超长数据的解决办法

前端上传大型文件或超长数据的解决办法,第1张

我们设计的上传文件大约在500m左右

我第一反应是blob,在HTML5中添加了blob类型用来定义前端较大数据,之前使用过blob流传输视频再使用html5中<video>标签读取blob流,所以blob可以作为这种文件传输的载体,那如何提交呢,使用可formdata提交blob数据,这种方式可以承受较大数据量的文件,但在使用formdata传输的过程中,浏览器会卡死,无法 *** 作。

还是舍友提醒,可采用数据分割的方式,一部分一部分上传。后经百度得知,文件分割要防止数据丢失进行大小校验,以及防止外部入侵,进行分段前端加密,后端校验。

百度发布了一款分割上传的组件web upload,可包含文件分割,大小校验等功能。

网站为: http://fex.baidu.com/webuploader/getting-started.html

佩服我们大学宿舍的技术氛围,出差回来的火车上跟大学舍友在微信上聊了两三个小时的技术,,,那天刚好是大学生开学那几天,路上好多大学生,好怀念自己的大学生活,好怀念与大学舍友谈天说地或技术探讨到深夜的日子

说了几个前端的问题,总结记录一下吧

其中只有一个我会的,,,先说这个问题,其他的我学习完再分享,留坑。。。。。。

//代码不支持IE 因为IE对HTML5支持不好$("#file").change(function(event) { var file = $("#file")[0].files[0]PostFile(file,0) })function PostFile(file,i){var name = file.name,//文件名size = file.size,//总大小shardSize = 2 * 1024 * 1024,shardSize = 2 * 1024 * 1024,//以2MB为一个分片shardCount = Math.ceil(size / shardSize) //总片数if(i >= shardCount){return }//计算每一片的起始与结束位置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("lastModified", file.lastModified) //slice方法用于切出文件的一部分form.append("name", name) form.append("total", shardCount) //总片数form.append("index", i + 1) //当前是第几片 //Ajax提交$.ajax({url: "/test/AjaxFile",type: "POST",data: form,async: true,//异步processData: false, //很重要,告诉jquery不要对form进行处理contentType: false, //很重要,指定为false才能形成正确的Content-Typesuccess: function(data){if(data){i = data++ var num = Math.ceil(i*100 / shardCount) $("#output").text(num+'%') PostFile(file,i) }}}) }

,首先要判断拖入的文件是否符合要求,包括图片类型、大小等,然后获取本地图片信息,实现预览,最后上传。

$(function(){

...接上部分

var box = document.getElementById('drop_area')//拖拽区域

box.addEventListener("drop",function(e){

e.preventDefault()//取消默认浏览器拖拽效果

var fileList = e.dataTransfer.files//获取文件对象

//检测是否是拖拽文件到页面的 *** 作

if(fileList.length == 0){

return false

}

//检测文件是不是图片

if(fileList[0].type.indexOf('image') === -1){

alert("您拖的不是图片!")

return false

}

//拖拉图片到浏览器,可以实现预览功能

var img = window.webkitURL.createObjectURL(fileList[0])

var filename = fileList[0].name//图片名称

var filesize = Math.floor((fileList[0].size)/1024)

if(filesize>500){

alert("上传大小不能超过500K.")

return false

}

var str = "<img src='"+img+"'><p>图片名称:"+filename+"</p><p>大小:"+filesize+"KB</p>"

$("#preview").html(str)

//上传

xhr = new XMLHttpRequest()

xhr.open("post", "upload.php", true)

xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")

var fd = new FormData()

fd.append('mypic', fileList[0])

xhr.send(fd)

},false)

})


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6176248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存