<?php |
class Upload{ |
private $filepath = './upload' ; //上传目录 |
private $tmpPath ; //PHP文件临时目录 |
private $blobNum ; //第几个文件块 |
private $totalBlobNum ; //文件块总数 |
private $fileName ; //文件名 |
private $md5FileName ; |
|
public function __construct( $tmpPath , $blobNum , $totalBlobNum , $fileName , $md5FileName ){ |
$this ->tmpPath = $tmpPath ; |
$this ->blobNum = $blobNum ; |
$this ->totalBlobNum = $totalBlobNum ; |
$this ->fileName = $this ->createName( $fileName , $md5FileName ); |
$this ->moveFile(); |
$this ->fileMerge(); |
} |
|
//判断是否是最后一块,如果是则进行文件合成并且删除文件块 |
private function fileMerge(){ |
if ( $this ->blobNum == $this ->totalBlobNum){ |
$blob = '' ; |
for ( $i =1; $i <= $this ->totalBlobNum; $i ++){ |
$blob .= file_get_contents ( $this ->filepath. '/' . $this ->fileName. '__' . $i ); |
} |
file_put_contents ( $this ->filepath. '/' . $this ->fileName, $blob ); |
$this ->deleteFileBlob(); |
} |
} |
|
//删除文件块 |
private function deleteFileBlob(){ |
for ( $i =1; $i <= $this ->totalBlobNum; $i ++){ |
@unlink( $this ->filepath. '/' . $this ->fileName. '__' . $i ); |
} |
} |
|
private function moveFile(){ |
$this ->touchDir(); |
$filename = $this ->filepath. '/' . $this ->fileName. '__' . $this ->blobNum; |
move_uploaded_file( $this ->tmpPath, $filename ); |
} |
|
//API返回数据 |
public function apiReturn(){ |
if ( $this ->blobNum == $this ->totalBlobNum){ |
if ( file_exists ( $this ->filepath. '/' . $this ->fileName)){ |
$data [ 'code' ] = 2; |
$data [ 'msg' ] = 'success' ; |
$data [ 'file_path' ] = 'http://' . $_SERVER [ 'HTTP_HOST' ].dirname( $_SERVER [ 'DOCUMENT_URI' ]). str_replace ( '.' , '' , $this ->filepath). '/' . $this ->fileName; |
} |
} else { |
if ( file_exists ( $this ->filepath. '/' . $this ->fileName. '__' . $this ->blobNum)){ |
$data [ 'code' ] = 1; |
$data [ 'msg' ] = 'waiting' ; |
$data [ 'file_path' ] = '' ; |
} |
} |
header( 'Content-type: application/json' ); |
echo json_encode( $data ); |
} |
|
|
private function touchDir(){ |
if (! file_exists ( $this ->filepath)){ |
return mkdir ( $this ->filepath); |
} |
} |
|
private function createName( $fileName , $md5FileName ){ |
return $md5FileName . '.' . pathinfo ( $fileName )[ 'extension' ]; |
} |
} |
|
$upload = new Upload( $_FILES [ 'file' ][ 'tmp_name' ], $_POST [ 'blob_num' ], $_POST [ 'total_blob_num' ], $_POST [ 'file_name' ], $_POST [ 'md5_file_name' ]); |
$upload ->apiReturn(); |