//切片上传
/**
* file_name 文件名称 xx.zip
index 切片序号-从1开始
count 总片数-最后的切片序号
file 上传的文件
uid 用户id
--------------
[file] => Array
(
[name] => xx.zip
[type] => application/zip
[tmp_name] => C:\WINDOWS\php34F9.tmp
[error] => 0
[size] => 207926
)
*/
public function add_file_qie(Request $request){
if(!isset($_FILES['file'])){
$this->code='400';
$this->message='没有选择文件';
$this->returninfo();
}
$this->arr=$request->input();
$ext = strtolower(pathinfo($this->arr['file_name'], PATHINFO_EXTENSION));
if(empty($ext) ||($ext!='rar' &&$ext!='zip' &&$ext!='7z')){
$this->code='400';
$this->message='['.$ext.']文件格式错误';
$this->returninfo();
}
session_start();
$s_id=session_id();//作为未登录用户标识,你也可以用其他的标识
$this->arr['file_name']=trim($this->arr['file_name']);
$dir='files/tmp/'.$s_id.'/'.$this->arr['file_name'].'/';
if(!is_dir($dir)){
mkdir($dir, 0777, true);
}
$url = $dir .$this->arr['file_name'] . '-' . $this->arr['index'];//win接收文件名时要转码,防止中文乱码
$res=move_uploaded_file($_FILES['file']['tmp_name'], $url);
if(empty($res)){
$this->code = '400'; //结果编码
$this->message = '上传失败';
$this->returninfo();
}
//合并切片
if($this->arr['count']==$this->arr['index']){
$url = $dir .$this->arr['file_name'];
$dst = fopen($url, 'wb');
for($i = 1; $i <= $this->arr['index']; $i++) {
$slice = $url . '-' . $i;
$src = fopen($slice, 'rb');
stream_copy_to_stream($src, $dst);
fclose($src);//关闭文件
unlink($slice);//删除文件
}
fclose($dst);
//将文件移入新目录
$dir='files/'.date('Y').'/'.date('m').'/'.date('d').'/'.$s_id.'/';
if(!is_dir($dir)){
mkdir($dir, 0777, true);
}
$newFile=$dir.'f'.mt_rand(0,300).$this->arr['file_name'];
copy($url,$newFile); //拷贝到新目录
unlink($url); //删除旧目录下的文件
//返回文件链接
$this->content=['url'=>$newFile];
}
$this->returninfo();
}
php-切片上传
猜你喜欢
转载自blog.csdn.net/sll9711/article/details/100163249
今日推荐
周排行