From 3842b1d2ef54c1bf49574616f495641c26395036 Mon Sep 17 00:00:00 2001
From: whb <whb@yoho.cn>
Date: Tue, 22 Mar 2016 10:01:19 +0800
Subject: [PATCH] 上传代码

---
 website/controller/Upload.class.php | 528 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1 file changed, 264 insertions(+), 264 deletions(-)

diff --git a/website/controller/Upload.class.php b/website/controller/Upload.class.php
index b0a42ea..521f28c 100644
--- a/website/controller/Upload.class.php
+++ b/website/controller/Upload.class.php
@@ -1,265 +1,265 @@
-<?php
-/**
- * 默认控制器
- */
-class Controller_Upload extends Controller_Abstract
-{
-	/**
-	 * @var integer 上传成功返回的编码
-	 * @since 1.1
-	 */
-	const SUCCESS_UPLOAD_CODE = 12;
-	
-    /**
-     * 后台插件上传图片首页
-     *
-     */
-    public function indexAction()
-    {
-        $data = array('error' => 0, 'url' => '', 'message'=> '', 'relaPath' => '');
-        $dir = strtolower($this->_request->query('dir'));
-        if($dir == 'media' || isset($_FILES['video'])) //视频上传
-        {
-			$video = json_decode(Lib_Video::saveVideo($_FILES), true);
-			$data['relaPath'] =  $video['video_url'];
-			$data['url'] = Lib_Video::getVideoUrl($video['video_url']);  
-        }
-        else
-        {
-        	$url = Lib_Images::saveImage($_FILES);
-        	if(empty($url))
-        	{
-        		$data['error'] = 1;
-        		$data['message'] = '上传文件失败';
-        	}
-        	else
-        	{
-        		$data['relaPath'] = $url;
-        		$data['url'] = Lib_Images::getImageUrl($url, 'source', 'fragmentimg');
-        	}
-        }
-        return json_encode($data);
-    }
-    
-    /**
-     * 后台插件上传视频处理
-     * 
-     * @return json
-     */
-    public function videoAction()
-    {
-    	$data = array('error' => 0, 'url' => '', 'message'=> '', 'relaPath' => '');
-    	if (isset($_GET["upload_ret"]))
-    	{
-    		$decodedRet = base64_decode( $_GET["upload_ret"]);
-    		$retObj = json_decode($decodedRet, true);
-    		$data['relaPath'] = $retObj['key'];
-    		$data['url'] = VIDEO_SITE_DOMAIN.'/'.$retObj['key'];
-    	}
-    	if(isset($_GET['error']))
-    	{
-    		$data['error'] = 1;
-    		$data['message'] = '上传文件失败';
-    	}
-    	return json_encode($data);
-    }
-    
-    
-    /**
-     * 上传文件[流]
-     *
-     * @param string key (密钥)
-     * @param string format (返回格式xml|json)
-     */
-    public function upfileAction()
-    {
-    	$format = $this->_request->query('format', 'xml');
-    	// 验证是否是post提交
-    	if (!$this->_request->isPost())
-    	{
-    		return $this->_response($format, Config_Code_Upload::$errorPost['code'], Config_Code_Upload::$errorPost['msg']);
-    	}
-    	// 验证key密钥是否有效
-    	$key = $this->_request->query('key', '');
-    	if ($key === '' || !is_string($key))
-    	{
-    		return $this->_response($format, Config_Code_Upload::$errorNoKey['code'], Config_Code_Upload::$errorNoKey['msg']);
-    	}
-    	$key = Util_Utils_Function::base64_str_decode($key);
-    	 
-    	// 验证key密钥中是否存在项目
-    	$keyData = json_decode(Util_Utils_AuthCode::decode($key, Config_File_Upload::$key), true);
-    	if (!array_key_exists('_project', $keyData))
-    	{
-    		return $this->_response($format, Config_Code_Upload::$errorValidKey['code'], Config_Code_Upload::$errorValidKey['msg']);
-    	}
-    
-    	// 验证Key密钥中项目是否存在
-    	$project = $keyData['_project'];
-    	$projectConfig = Lib_Images::genConfig($project);
-    	if (array() === $projectConfig)
-    	{
-    		return $this->_response($format, Config_Code_Upload::$errorNoProject['code'], Config_Code_Upload::$errorNoProject['msg'] . $project);
-    	}
-    	$tag = $this->_request->query('tag', '');
-    	if($tag == 'flash')
-    	{
-    		//flash上传,type有问题
-    		foreach($_FILES as $key => $file)
-    		{
-    			if($file['type'] == 'application/octet-stream')
-    			{
-    				$_FILES[$key]['type'] = 'image/jpeg';
-    			}
-    		}
-    	}
-    	// 上传文件[流]操作
-    	if (array() !== $_FILES) // 文件
-    	{
-    		$upload = new Util_Upload_File($_FILES, $projectConfig['serverPath']);
-    		$upload->setFormat($projectConfig['format']);
-    	}
-    	elseif (false !== ($file = $this->_request->requestRawBody())) // 文件流
-    	{
-    		//读取头信息高位
-    		$fileExtCode = substr($file, 0, 2);
-    		$format = '';
-    		if(strlen($fileExtCode))
-    		{
-    			$fileExtCode = unpack('C2char',$fileExtCode);
-    			$fileExtCode = intval(implode('',$fileExtCode));
-    		}
-    		$format = Util_Common_Io_FileExt::getMine(Util_Common_Io_FileExt::getExtByCode($fileExtCode));
-    		if(!preg_match($projectConfig['format'], $format))
-    		{
-    			return $this->_response($format, 10, '不支持上传的文件类型');
-    		}
-    		$upload = new Util_Upload_FileStream($file, $projectConfig['serverPath']);
-    	}
-    	else // 文件[流]不存在
-    	{
-    		return $this->_response($format, Config_Code_Upload::$errorNoUploadFile['code'], Config_Code_Upload::$errorNoUploadFile['msg']);
-    	}
-    	$upload->setMaxFileSize($projectConfig['upload_max_size']);
-    	$upload->setPrefix($projectConfig['randNode']);
-    	if (isset($keyData['file_path']) && is_string($keyData['file_path']))
-    	{
-    		$upload->setNewFile($keyData['file_path']);
-    	}
-    	// 验证文件是否有效
-    	$check = $upload->check();
-    	if ($check['code'] !== 0)
-    	{
-    		return $this->_response($format, $check['code'], $check['mes']);
-    	}
-    	// 上传并构建返回结果, 同时检查上传文件是否有错
-    	$result = $this->genResult($format, $upload, $check['result'], $project, $projectConfig);
-    	if (isset($result['hasError']))
-    	{
-    		return $this->_response($format, Config_Code_Upload::$errorUploadFailed['code'], Config_Code_Upload::$errorUploadFailed['msg']);
-    	}
-    	return $this->_response($format, self::SUCCESS_UPLOAD_CODE, $check['mes'], $result);
-    }
-    
-    /**
-     * 上传并构建返回的结果
-     *
-     * @param object $upload (上传类)
-     * @param array $files (文件列表)
-     * @return array
-     */
-    protected function genResult($format, &$upload, $files, $project, &$projectConfig)
-    {
-    	$result = array();
-    
-    	$file = null;
-    	$writed = array();
-    	$isJson = strtolower($format) === 'json';
-    	foreach ($files as $id => $info)
-    	{
-    		$writed = $upload->writeOne($id);
-    		if ($writed['code'] !== self::SUCCESS_UPLOAD_CODE)
-    		{
-    			$result['hasError'] = true;
-    			break;
-    		}
-    		$file = $writed['result']['hit'][$id];
-    		$result[$id] = $this->_genJsonResult($file, $project, $projectConfig);
-    	}
-    
-    	return $result;
-    }
-    
-    /**
-     * 返回默认的图片信息
-     *
-     * @return array
-     */
-    private function _getDefaultMeta()
-    {
-    	return array('width' => 200, 'height' => 300, 'size' => 200000, 'mine' => 'image/jpeg',);
-    }
-    
-    /**
-     * 构建JSON格式的返回结果
-     *
-     * @param string $url (相对地址)
-     * @param string $project (项目名称)
-     * @param array $projectConfig (项目配置)
-     * @return void
-     */
-    private function _genJsonResult($params, $project, &$projectConfig)
-    {
-    	$result = array(); 	
-    	// 预处理生成缩略图片
-    	$data = Lib_Images::getImageInfo($params['relaPath'], $project);
-    	if (array() === $data)
-    	{
-    		$data = $this->_getDefaultMeta();
-    	}
-    	$result['relaPath'] = $params['relaPath'];
-    	$result['sourcePath'] = $projectConfig['sourceUrl'] . $params['relaPath'];
-    	$result['absPath'] = $result['sourcePath'];
-    	$result['width'] = $data['width'];
-    	$result['height'] = $data['height'];
-    	$result['size'] = $data['size'];
-    	$result['mine'] = $data['mine'];
-    	return $result;
-    }
-    
-    /**
-     * 构建返回结果
-     *
-     * @param string $format (返回格式 xml|json)
-     * @param integer $code (错误编号)
-     * @param string $msg  (错误提示)
-     * @param mixed $data (返回数据)
-     * @return string | void
-     */
-    private function _response($format = 'xml', $code = 0, $msg = '', $data = '')
-    {
-    	$response = '';
-    
-    	switch (strtolower($format))
-    	{
-    		case 'json':
-    			header('Content-Type: application/json; charset=utf-8');
-    			$response = Lib_Utils::result($code, $msg, $data);
-    			break;
-    		case 'xml':
-    		default:
-    			header('Content-Type: text/xml; charset=utf-8');
-    			$response = Util_Utils_Convert::array2xml(array('Code' => $code, 'Msg' => $msg, 'Data' => $data,), 'File');
-    			$response = <<<EOD
-<?xml version="1.0" encoding="utf-8"?>
-<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-{$response}
-</Response>
-EOD;
-    break;
-    	}
-    	header("Access-Control-Allow-Origin: *");//让html5支持跨域上传
-    	return $response;
-    }
-    
+<?php
+/**
+ * 默认控制器
+ */
+class Controller_Upload extends Controller_Abstract
+{
+	/**
+	 * @var integer 上传成功返回的编码
+	 * @since 1.1
+	 */
+	const SUCCESS_UPLOAD_CODE = 12;
+	
+    /**
+     * 后台插件上传图片首页
+     *
+     */
+    public function indexAction()
+    {
+        $data = array('error' => 0, 'url' => '', 'message'=> '', 'relaPath' => '');
+        $dir = strtolower($this->_request->query('dir'));
+        if($dir == 'media' || isset($_FILES['video'])) //视频上传
+        {
+			$video = json_decode(Lib_Video::saveVideo($_FILES), true);
+			$data['relaPath'] =  $video['video_url'];
+			$data['url'] = Lib_Video::getVideoUrl($video['video_url']);  
+        }
+        else
+        {
+        	$url = Lib_Images::saveImage($_FILES);
+        	if(empty($url))
+        	{
+        		$data['error'] = 1;
+        		$data['message'] = '上传文件失败';
+        	}
+        	else
+        	{
+        		$data['relaPath'] = $url;
+        		$data['url'] = Lib_Images::getImageUrl($url, 'source', 'fragmentimg');
+        	}
+        }
+        return json_encode($data);
+    }
+    
+    /**
+     * 后台插件上传视频处理
+     * 
+     * @return json
+     */
+    public function videoAction()
+    {
+    	$data = array('error' => 0, 'url' => '', 'message'=> '', 'relaPath' => '');
+    	if (isset($_GET["upload_ret"]))
+    	{
+    		$decodedRet = base64_decode( $_GET["upload_ret"]);
+    		$retObj = json_decode($decodedRet, true);
+    		$data['relaPath'] = $retObj['key'];
+    		$data['url'] = VIDEO_SITE_DOMAIN.'/'.$retObj['key'];
+    	}
+    	if(isset($_GET['error']))
+    	{
+    		$data['error'] = 1;
+    		$data['message'] = '上传文件失败';
+    	}
+    	return json_encode($data);
+    }
+    
+    
+    /**
+     * 上传文件[流]
+     *
+     * @param string key (密钥)
+     * @param string format (返回格式xml|json)
+     */
+    public function upfileAction()
+    {
+    	$format = $this->_request->query('format', 'json');
+    	// 验证是否是post提交
+    	if (!$this->_request->isPost())
+    	{
+    		return $this->_response($format, Config_Code_Upload::$errorPost['code'], Config_Code_Upload::$errorPost['msg']);
+    	}
+    	// 验证key密钥是否有效
+    	$key = $this->_request->query('key', '');
+    	if ($key === '' || !is_string($key))
+    	{
+    		return $this->_response($format, Config_Code_Upload::$errorNoKey['code'], Config_Code_Upload::$errorNoKey['msg']);
+    	}
+    	$key = Util_Utils_Function::base64_str_decode($key);
+    	 
+    	// 验证key密钥中是否存在项目
+    	$keyData = json_decode(Util_Utils_AuthCode::decode($key, Config_File_Upload::$key), true);
+    	if (!array_key_exists('_project', $keyData))
+    	{
+    		return $this->_response($format, Config_Code_Upload::$errorValidKey['code'], Config_Code_Upload::$errorValidKey['msg']);
+    	}
+    
+    	// 验证Key密钥中项目是否存在
+    	$project = $keyData['_project'];
+    	$projectConfig = Lib_Images::genConfig($project);
+    	if (array() === $projectConfig)
+    	{
+    		return $this->_response($format, Config_Code_Upload::$errorNoProject['code'], Config_Code_Upload::$errorNoProject['msg'] . $project);
+    	}
+    	$tag = $this->_request->query('tag', '');
+    	if($tag == 'flash')
+    	{
+    		//flash上传,type有问题
+    		foreach($_FILES as $key => $file)
+    		{
+    			if($file['type'] == 'application/octet-stream')
+    			{
+    				$_FILES[$key]['type'] = 'image/jpeg';
+    			}
+    		}
+    	}
+    	// 上传文件[流]操作
+    	if (array() !== $_FILES) // 文件
+    	{
+    		$upload = new Util_Upload_File($_FILES, $projectConfig['serverPath']);
+    		$upload->setFormat($projectConfig['format']);
+    	}
+    	elseif (false !== ($file = $this->_request->requestRawBody())) // 文件流
+    	{
+    		//读取头信息高位
+    		$fileExtCode = substr($file, 0, 2);
+    		$format = '';
+    		if(strlen($fileExtCode))
+    		{
+    			$fileExtCode = unpack('C2char',$fileExtCode);
+    			$fileExtCode = intval(implode('',$fileExtCode));
+    		}
+    		$format = Util_Common_Io_FileExt::getMine(Util_Common_Io_FileExt::getExtByCode($fileExtCode));
+    		if(!preg_match($projectConfig['format'], $format))
+    		{
+    			return $this->_response($format, 10, '不支持上传的文件类型');
+    		}
+    		$upload = new Util_Upload_FileStream($file, $projectConfig['serverPath']);
+    	}
+    	else // 文件[流]不存在
+    	{
+    		return $this->_response($format, Config_Code_Upload::$errorNoUploadFile['code'], Config_Code_Upload::$errorNoUploadFile['msg']);
+    	}
+    	$upload->setMaxFileSize($projectConfig['upload_max_size']);
+    	$upload->setPrefix($projectConfig['randNode']);
+    	if (isset($keyData['file_path']) && is_string($keyData['file_path']))
+    	{
+    		$upload->setNewFile($keyData['file_path']);
+    	}
+    	// 验证文件是否有效
+    	$check = $upload->check();
+    	if ($check['code'] !== 0)
+    	{
+    		return $this->_response($format, $check['code'], $check['mes']);
+    	}
+    	// 上传并构建返回结果, 同时检查上传文件是否有错
+    	$result = $this->genResult($format, $upload, $check['result'], $project, $projectConfig);
+    	if (isset($result['hasError']))
+    	{
+    		return $this->_response($format, Config_Code_Upload::$errorUploadFailed['code'], Config_Code_Upload::$errorUploadFailed['msg']);
+    	}
+    	return $this->_response($format, self::SUCCESS_UPLOAD_CODE, $check['mes'], $result);
+    }
+    
+    /**
+     * 上传并构建返回的结果
+     *
+     * @param object $upload (上传类)
+     * @param array $files (文件列表)
+     * @return array
+     */
+    protected function genResult($format, &$upload, $files, $project, &$projectConfig)
+    {
+    	$result = array();
+    
+    	$file = null;
+    	$writed = array();
+    	$isJson = strtolower($format) === 'json';
+    	foreach ($files as $id => $info)
+    	{
+    		$writed = $upload->writeOne($id);
+    		if ($writed['code'] !== self::SUCCESS_UPLOAD_CODE)
+    		{
+    			$result['hasError'] = true;
+    			break;
+    		}
+    		$file = $writed['result']['hit'][$id];
+    		$result[$id] = $this->_genJsonResult($file, $project, $projectConfig);
+    	}
+    
+    	return $result;
+    }
+    
+    /**
+     * 返回默认的图片信息
+     *
+     * @return array
+     */
+    private function _getDefaultMeta()
+    {
+    	return array('width' => 200, 'height' => 300, 'size' => 200000, 'mine' => 'image/jpeg',);
+    }
+    
+    /**
+     * 构建JSON格式的返回结果
+     *
+     * @param string $url (相对地址)
+     * @param string $project (项目名称)
+     * @param array $projectConfig (项目配置)
+     * @return void
+     */
+    private function _genJsonResult($params, $project, &$projectConfig)
+    {
+    	$result = array(); 	
+    	// 预处理生成缩略图片
+    	$data = Lib_Images::getImageInfo($params['relaPath'], $project);
+    	if (array() === $data)
+    	{
+    		$data = $this->_getDefaultMeta();
+    	}
+    	$result['relaPath'] = $params['relaPath'];
+    	$result['sourcePath'] = $projectConfig['sourceUrl'] . $params['relaPath'];
+    	$result['absPath'] = $result['sourcePath'];
+    	$result['width'] = $data['width'];
+    	$result['height'] = $data['height'];
+    	$result['size'] = $data['size'];
+    	$result['mine'] = $data['mine'];
+    	return $result;
+    }
+    
+    /**
+     * 构建返回结果
+     *
+     * @param string $format (返回格式 xml|json)
+     * @param integer $code (错误编号)
+     * @param string $msg  (错误提示)
+     * @param mixed $data (返回数据)
+     * @return string | void
+     */
+    private function _response($format = 'xml', $code = 0, $msg = '', $data = '')
+    {
+    	$response = '';
+    
+    	switch (strtolower($format))
+    	{
+    		case 'json':
+    			header('Content-Type: application/json; charset=utf-8');
+    			$response = Lib_Utils::result($code, $msg, $data);
+    			break;
+    		case 'xml':
+    		default:
+    			header('Content-Type: text/xml; charset=utf-8');
+    			$response = Util_Utils_Convert::array2xml(array('Code' => $code, 'Msg' => $msg, 'Data' => $data,), 'File');
+    			$response = <<<EOD
+<?xml version="1.0" encoding="utf-8"?>
+<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+{$response}
+</Response>
+EOD;
+    break;
+    	}
+    	header("Access-Control-Allow-Origin: *");//让html5支持跨域上传
+    	return $response;
+    }
+    
 }
\ No newline at end of file
--
libgit2 0.24.0