jQuery+PHP实现对大文件分片后多线程上传,返回上传后的URL
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<$chunks;$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}";