大文件切片上传

1.前端js

// function uploadAppFile(n) {
// if(n==0){alert("下载完成")}
// // var file = $("#fielinput").get(0).files;
// // readFile(file);

// var file = document.getElementById("fielinput");
// //获取所有文件
// var fileList = file.files;
// //操作文件
// handleFiles(fileList);
// }
// $("#fielinput").change(function(){
// var file = $("#fielinput").get(0).files;
// readFile(file);
// });


// async function handleFiles(fileList) {
// var i = 0;
// while (i<fileList.length){
// console.log("=================================================");
// console.log('开始处理第' + i + "个文件, 文件是" + fileList[i]['name'] + "大小是:" + fileList[i]['size'] );
// var targetFile = fileList[i];
// //var totalSize += targetFile.size;
// await uploadFile(targetFile,i);
// i++;
// if(i == fileList.length) return;
// }
// }

// async function uploadFile(targetFile, index) {
// var name = targetFile.name
// var tmp = targetFile.name.split(".");
// var filename = "file-"+guid() + '.' + tmp[tmp.length-1] ;
// var fileSize = targetFile.size;
// var pieceSize = 1024*300,totalSize=0,uploadedSize = 0;
// var total = Math.ceil( fileSize / pieceSize );

// await handle();


// async function handle() {
// var i = 0;
// var start = end = 0;
// var progress1=document.getElementById("progress1");
// while(i < total){
// var pro = parseInt(i/total*100);
// // console.log(pro);
// progress1.value = pro;


// // 计算进度
// end = start + pieceSize;
// if(end >= fileSize){
// end = fileSize;
// }

// // console.log( '文件的index:' + index+ '| 处理文件切片 i:'+i , 'start:' + start, 'end:' + end );
// var frag = targetFile.slice(start, end);


// await send(name, filename, frag, i, total ,function () {
// // 单片完成
// // console.log( '文件的index:' + index+ "| 切片上传完成 回调 res111",i)
// if (i == (total-1)) {
// // console.log(i + "===" + total + "over");
// progress1.value = 100;
// layer.msg('上传成功',{
// icon: 1,
// shadeClose: true,
// time: 3000
// });
// }
// });
// start = end;
// i++;
// }
// }
// }

// //send
// async function send(name, filename, frag, index, total, cb) {

// var formData = new FormData();
// var fragname = "frag-" + guid();

// formData.append("filename",filename);
// formData.append("fragname",fragname);
// formData.append("name",name);
// formData.append("file",frag);
// formData.append("fragindex",index);
// formData.append("total",total);
// var url = "{:U('cos/uploadcos')}";
// await $.ajax({
// url: url,
// type: 'POST',
// cache: false,
// data: formData,
// processData: false,
// contentType: false
// }).done(function (res) {
// // console.log('res:' + index);
// cb();
// }).fail(function (res) {
// });
// }

// //用于生成uuid
// function S4() {
// return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
// }
// function guid() {
// return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
// }

 

2后台接口upload

定义前端切片的绝对路径:define("FILEPATH", "/域根目录/data/files/");
定义接口合并的绝对路径:define("FRAGPATH","/域根目录/data/frags/" );

public function upload()
{
$file = $_FILES['file'];
$game_name = $_POST['name'];
$filename = explode("." , $_POST['filename']);
$ext = $filename[1];
$filename = $filename[0];
$orgFileName = $_POST['filename'];
//新建frag 文件夹, 以filename为命名方式
if(!file_exists(FRAGPATH.$filename)){
mkdir(FRAGPATH.$filename);
}

//将接收到的frag文件移入file文件夹中
//$frag_path = SITE_ROOT.'/dir/'.$filename.'/'.iconv('UTF-8','gbk',basename($_FILES['file']['tmp_name']));
$frag_path = FRAGPATH.$filename ."/". $_POST['fragname'];
try{
if(move_uploaded_file($_FILES['file']['tmp_name'] , $frag_path)){
echo("success");
}
}catch (Exception $e){
throw new Exception();
}

//合并file文件夹中的frag为最终文件
if( $_POST['fragindex'] == $_POST["total"] -1 ){
$blob = "";
$fragDir = FRAGPATH.$filename;
$handler = @opendir($fragDir);
//获取filename
while ( ( $fragFileName = readdir($handler) ) !== false ){
$fp = fopen( FILEPATH . '/' . $orgFileName,"ab" );
// 务必使用!==,防止目录下出现类似文件名“0”等情况
if ($fragFileName !== "." && $fragFileName !== "..")
{
//方式二:
$value = $fragDir . "/" . $fragFileName;
$handle = fopen($value,"rb");
fwrite($fp,fread($handle,filesize($value)));
fclose($handle);

//删除切片文件
@unlink($fragDir . "/" . $fragFileName);
}
}
//删除切片文件夹
@rmdir($fragDir);
}
}

 

posted @ 2021-10-20 16:31  无缺胜有缺  阅读(187)  评论(0)    收藏  举报