JS-超大文件上传-如何上传文件-大文件上传?

JavaScript018

JS-超大文件上传-如何上传文件-大文件上传?,第1张

可以试试这样

前端通过 input type =  "file" 接收文件

然后使用文件的 slice 的方法对文件进行分片

将每一片提交到后台依次提交到后台,提交时通过 formData 提交,添加几个字段

(1). 这次上传文件的惟一 id

(2). 上传的状态,是开始,还是上传中,还是上传结束

(3). 分片的位置,比如是第一片,第二片

(4). 分片的数据

后端当接收到一个文件 id 的结束标识时,把对应的分片按位置数据拼接起来就行

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>upload</title><script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script></head><body><input type="file" name="file" id="file"><button id="upload" onClick="upload()">upload</button><script type="text/javascript">var bytesPerPiece = 1024 * 1024// 每个文件切片大小定为1MB . var totalPieces//发送请求 function upload() { var blob = document.getElementById("file").files[0]var start = 0var endvar index = 0var filesize = blob.sizevar filename = blob.name//计算文件切片总数 totalPieces = Math.ceil(filesize / bytesPerPiece)while(start <filesize) { end = start + bytesPerPieceif(end >filesize) { end = filesize} var chunk = blob.slice(start,end)//切割文件 var sliceIndex= blob.name + indexvar formData = new FormData()formData.append("file", chunk, filename)$.ajax({ url: 'http://localhost:9999/test.php', type: 'POST', cache: false, data: formData, processData: false, contentType: false, }).done(function(res){ }).fail(function(res) { })start = endindex++} } </script></body></html>

function saveUser() {

            var file = document.getElementById("file").files[0]

            //原生ajax实现文件上传

            var formData = new FormData()

            if (file) {

                formData.append("file", file)

                console.log(file)

            }

            //得到xhr对象

            var xhr = null

            if (XMLHttpRequest) {

                xhr = new XMLHttpRequest()

            } else {

                xhr = new ActiveXObject("Microsoft.XMLHTTP")

            }

            xhr.open("post", "http://www-test.mianyazhu.com/supplier/fileSupplier/file/upload/supplier", true)//设置提交方式,url,异步提交

//            xhr.setRequestHeader("Content-Type","multipart/form-data")

            xhr.onload = function () {

                var data = xhr.responseText    //得到返回值

                console.log(data)

            }

            xhr.send(formData)

        }