jquery 分片上传php,php 大文件分片上传

前端部分

上传

//上传控件

uploadBig('upload','zip,rar,7z,tar',{

id: '',

type: 'upload_file',

} ,(res)=>{

//todo 上传完成回调

console.log('上传完成',res);

},(percent)=>{

//todo 上传中回调

console.log(percent);

})

/*

* 大文件分片上传

* @param btn 绑定上传按钮 id

* @param ext 上传文件后缀限制 英文逗号分隔

* @param formData 额外参数

* @param callback 回调函数 function

* @param progress 上传过程回调函数 function

*

*/

function uploadBig(btn,ext,formData,callback,progress){

var arr = ext.split(',');

var mimeTypes = '';

for(var ai=0;ai

mimeTypes += '.'+arr[ai]+','

}

mimeTypes = mimeTypes.substring(0,mimeTypes.length-1);

let uploader = new WebUploader.Uploader({

// swf文件路径

// swf: 'webuploader/Uploader.swf',

// 文件接收服务端。

server: 'uploader.php',

auto:true,

// 选择文件的按钮。可选。

// 内部根据当前运行是创建,可能是input元素,也可能是flash.

pick: '#'+btn,

// 分片上传。

chunked: true,

threads:1,//并发上传数

chunkSize: 2 1024 1024,

// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!

resize: false,

accept: {

title:'',

extensions:ext,

mimeTypes:mimeTypes

},

formData: formData

});

// //开始上传

// $('#ctlBtn').click(function () {

// uploader.upload();

// });

let $list = $('#upload_big_list');

// 当有文件被添加进队列的时候

uploader.on( 'fileQueued', function( file ) {

$list.append( '

' +

// '

' + file.name + '
' +

// '

'

' );

uploader.upload();

});

// 文件上传过程中创建进度条实时显示。

uploader.on( 'uploadProgress', function( file, percentage) {

if(typeof progress == 'function'){

progress(percentage);

}

});

uploader.on( 'uploadSuccess', function( file, response ) {

if (response.status == 1) {

callback(response);

}

});

uploader.on("error", function (type) {

if (type == "Q_TYPE_DENIED") {

alert("上传文件类型错误!");

}

else if(type == 'F_DUPLICATE'){

alert("上传文件重复");

}

// else if (type == "Q_EXCEED_SIZE_LIMIT") {

// alert("文件大小不能超过2M");

// }

else {

alert("上传出错,请联系管理员。error: "+type);

}

});

}

后台 uploader.php<?php

header("Content-type: text/html; charset=utf-8");

header('Access-Control-Allow-Origin:*');

//储存分片

//获取文件后缀名

$ext_name = substr(strrchr($_REQUEST['name'], '.'), 1);

//随机生成保存的文件名

$file_name = GetRandStr(10).".$ext_name";

//分片保存目录

$request_name = $_REQUEST['name'];

$tmp_dir = 'upload/chunk_tmp/' .$request_name . '/';

//文件保存目录

$target_file = "upload/;

if (! is_dir($tmp_dir)) {

mkdir($tmp_dir, 0777, true);

}

if(!isset($_REQUEST['chunk'])){

$chunk = '0';

$chunks = '1';

}else{

$chunk = $_REQUEST['chunk'];

$chunks = $_REQUEST['chunks'];

}

move_uploaded_file($_FILES['file']['tmp_name'], $tmp_dir . $chunk);

//合并分片

if ($chunk == $chunks - 1) { //最后一个分片

if (! is_dir($target_file)) {

mkdir($target_file, 0777, true);

}

$target_file .= $file_name;

$handle = fopen($target_file, 'x+');

for ($i=0; $i

fwrite($handle, @file_get_contents($tmp_dir . $i));

}

fclose($handle);

//删除分片文件

// for ($i=0; $i

// @unlink($tmp_dir . $i);

// }

// rmdir($tmp_dir);

$msg = [

'$_FILES' => json_encode($_FILES),

'$_REQUEST' => json_encode($_REQUEST),

];

echo json_encode(['status' => 1,'file_path'=>$target_file,'file_name'=>$file_name]);exit;

}else{

$target_file = '';

}

$msg = [

'$_FILES' => json_encode($_FILES),

'$_REQUEST' => json_encode($_REQUEST),

];

echo json_encode(['status' => 1, 'msg' => json_encode($msg),'file_path'=>$target_file,'file_name'=>$file_name]);exit;

function GetRandStr ($length){

$str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

$len=strlen($str)-1;

$randstr='';

for($i=0;$i

$num=mt_rand(0,$len);

$randstr .= $str[$num];

}

return $randstr;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值