php多进程上传,原创:jQuery+PHP实现对大文件分片后多线程上传

jQuery+PHP实现对大文件分片后多线程上传 (博主原创)

PHP端上传代码session_start();

//文件分片上传

class uploader{

//执行上传(的name属性,保存路径-相对当前路径)

public function upload($name,$savedir = 'uploads'){

$return_arr = array('0','');

$userID = $_SESSION['uploader_id']; //用户标识

if(!empty($_POST['act']) && trim($_POST['act'])=='combine'){

//-------------合并文件

$chunks = intval($_POST['chunks']);//总分块个数

//文件后缀

$type = substr($_POST['filename'],strripos($_POST['filename'],'.'));

//保存临时文件

$tmppath = $savedir.'/tmp'; //临时目录,

if(!file_exists($tmppath)){ @mkdir($tmppath,0777,true); }

$filenamemd5 = md5($_POST['filename']);

$savedir = $savedir.'/files/'.date('Ym',time());

if(!file_exists($savedir)){ @mkdir($savedir,0777,true);}

$newname = date('mdH',time()).rand(10000,99999).'_'.rand(100000,999999).$type;

$writer = fopen("{$savedir}/{$newname}","ab"); //合并后的文件名

for($i=0;$i

$file2read = "{$tmppath}/{$userID}_{$filenamemd5}_{$i}";

$reader = fopen($file2read,"rb");

fwrite($writer,fread($reader,filesize($file2read)));

fclose($reader);

unset($reader);

@unlink($file2read);//删除分块临时文件

}

fclose($writer);

$return_arr[0]='1';

$return_arr[1]="{$savedir}/{$newname}";

}else{

if(empty($_FILES[$name]) || $_FILES[$name]["error"] > 0){

return array( '0','上传失败' );

}

//-------------保存临时文件

$chunks = intval($_POST['chunks']);//总分块个数

$chunk  = intval($_POST['chunk']);//当前分块索引

//临时目录

$tmppath = $savedir.'/tmp';

if(!file_exists($tmppath)){ @mkdir($tmppath,0777,true); }

$filenamemd5 = md5($_POST['filename']);

$tmpname = "{$userID}_{$filenamemd5}_{$chunk}";//临时文件名

@move_uploaded_file($_FILES[$name]["tmp_name"],"{$tmppath}/{$tmpname}");

$return_arr[0]='1';

$return_arr[1]='needmore';

}

return $return_arr;

}

}

$res = array(

'flag'        =>false,

'url'        =>'',//上传得到的新路径

'info'        =>'',

);

$er = new uploader();

$arr = $er->upload("newfile");

if(empty($arr[0])){

$res['info'] = $arr[1];

}else{

$pathurl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

$pathurl = substr($pathurl,0,strripos($pathurl,"/"));

$res['flag'] = true;

$res['url'] = $pathurl.'/'.$arr[1];

$res['info'] = "success";

}

echo json_encode($res); die();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值