123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- <?php
- /**
- *------------------------------------------------------
- * BaseProcess.php
- *------------------------------------------------------
- *
- * @author Mike
- * @date 2016/5/26 11:17
- * @version V1.0
- *
- */
- namespace App\Services\Base;
- use App\Models\BaseAttachmentModel;
- use Response;
- use App\Models\BaseSettingsModel;
- use Image;
- class Attachment
- {
- private $_model;
- public function __construct() {
- if( !$this->_model ) $this->_model = new BaseAttachmentModel();
- }
- public function aliUpload(){
- }
- public function specialUpload(){
- }
- public function _uploadfiles(){
- }
- public function _jsonMessage($status,$ret){
- $ret['code'] = $status;
- return $ret;
- }
- // /**
- // * 上传到本地服务器
- // * @param $field
- // * @param $request
- // */
- // public function localUpload($field = '', $request = array())
- // {
- // $uploadfiles = $this->_uploadfiles($field);
- // if(!$uploadfiles){
- // return $this->_jsonMessage(FAILURE_CODE, $request['elementid'], ['message' => '没有文件被上传']);
- // }
- //
- // //文件夹路径
- // $folder = isset($request['folder']) ? $request['folder'] : 'common';
- //
- // //上传的文件名是否MD5
- // $is_md5 = isset($request['is_md5']) ? $request['is_md5'] : 1;
- // if($is_md5){
- // $fileurl = $folder . '/' . md5_file($uploadfiles[0]['tmp_name']);
- // }else{
- // $fileName = basename($uploadfiles[0]['name'], "." . substr(strrchr($uploadfiles[0]['name'], '.'), 1));
- // $fileurl = $folder . '/' . $fileName;
- // }
- //
- // $filePath = public_path() . DIRECTORY_SEPARATOR . $fileurl;
- // $dirPath = public_path() . DIRECTORY_SEPARATOR .$folder;
- //
- // //创建目录
- // if(!is_dir($dirPath)){
- // @mkdir($dirPath, 0755, true)
- //// $this->_dirUtil->dirCreate($dirPath);
- // }
- // /*if(!file_exists($filePath)){
- // $this->_dirUtil->dirCreate($filePath);
- // }*/
- //
- // //获取文件后缀名
- // $fileext = strtolower(trim(substr(strrchr($uploadfiles[0]['name'], '.'), 1, 10)));
- //
- // //判断是否需要解包
- // $is_extract = isset($request['is_extract']) ? $request['is_extract'] : 0;
- // if($is_extract && $fileext == 'zip'){ //ZIP解压
- //
- //// $message = $this->_zipTool($uploadfiles[0]['tmp_name'], $filePath);
- //
- // }elseif($is_extract && $fileext == 'rar'){ //RAR解压
- //
- // if(!get_extension_funcs('rar')){
- // return $this->_jsonMessage(500, $request['elementid'], ['message' => '没有发现RAR扩展库']);
- // }else{
- //// $message = $this->_rarTool($uploadfiles[0]['tmp_name'], $filePath);
- // }
- //
- // }else{
- //
- // $fileurl = $filePath . '.' . $fileext;
- // if(move_uploaded_file($uploadfiles[0]['tmp_name'], $fileurl)){
- // $fileurl = trim(str_replace(public_path(), '', $fileurl), '\\');
- // return $this->_jsonMessage(SUCESS_CODE, $request['elementid'], ['message' => '文件上传成功', 'fileurl' => $fileurl]);
- // }else{
- // return $this->_jsonMessage(FAILURE_CODE, $request['elementid'], ['message' => '文件上传成功', 'fileurl' => '']);
- // }
- //
- // }
- // $attachment = new BaseAttachmentModel();
- // $attachment->name = $clientName;
- // $attachment->md5 = $md5;
- // $attachment->path = $real_path;
- // $attachment->url = $url_path;
- // $attachment->size = $fileSize;
- // $attachment->file_type = $fileMimeType;
- // if ($attachment->save()) {
- // $result = 'Foundation/Attachment/download/?md5='.$md5;
- // } else {
- // @unlink($real_path);
- // $result= ErrorCode::ATTACHMENT_SAVE_FAILED;
- // }
- // if($message['code'] == 200){
- // //修改文件夹为只读属性
- // //chmod($filePath, 0444);
- // }else{
- // if(file_exists($filePath)){
- // rmdir($filePath);
- // }
- // }
- // return $this->_jsonMessage($message['code'], $request['elementid'], ['message' => $message['message'], 'fileurl' => $fileurl,'name'=>basename($uploadfiles[0]['name'], '.' . $fileext)]);
- // }
- /**
- * 上传附件
- *
- * @param string|array $field 文件key
- * @param Request $request laravel's http request
- * @param string $tag 文件tag
- * @param int $size 文件size限制,默认2M
- * @param array $mimeType 文件mime类型限制,默认不限
- * @return array|string|int 返回:md5字串|ErrorCode或[md5字串|ErrorCode]
- */
- public function localUpload($field, $request, $tag = 'files', $size = 10 * 1024 * 1024, array $mimeType = ['image/jpeg', 'image/png', 'image/gif','video/mp4','video/quicktime'])
- {
- $tag = $request['folder'];
- $class = isset($request['class']) ? $request['class'] : '未分类';
- $sizex = isset($request['sizex']) ? $request['sizex'] : 0;
- $sizey = isset($request['sizey']) ? $request['sizey'] : 0;
- $rel_path = $tag . '/' . date('Ymd');
- $path = public_path() . $rel_path;
- // dd($request);
- if (!file_exists($path)) {
- if (!@mkdir($path, 0755, true)) {
- // return ErrorCode::ATTACHMENT_MKDIR_FAILED;
- return $this->_jsonMessage(500, ['message' => '目录创建失败']);
- }
- }
- $file = $request[$field];
- if ($file === null) {
- return $this->_jsonMessage(500, ['message' => '没有文件被上传']);
- }
- if (!$file->isValid()) {
- return $this->_jsonMessage(500, ['message' => '不允许上传']);
- }
- $fileSize = $file->getSize();
- if ($fileSize > $size) {
- // $result[$idx] = ErrorCode::ATTACHMENT_SIZE_EXCEEDED;
- return $this->_jsonMessage(500, ['message' => '文件大小超过限制']);
- }
- $fileMimeType = $file->getMimeType();
- if (!empty($mimeType) && !in_array($fileMimeType, $mimeType)) {
- return $this->_jsonMessage(500, ['message' => '文件格式不被允许']);
- }
- $clientName = $file->getClientOriginalName();
- $md5 = md5($clientName . time());
- $md5_filename = $md5 . '.' . $file->getClientOriginalExtension();
- if(isset($request['from']) && $request['from'] == 'crop') {
- $clientName = isset($request['name']) ? $request['name'] : '裁剪.png';
- $md5_filename = $md5_filename . 'png';
- }
- try {
- if(!$file->move($path, $md5_filename)){
- return $this->_jsonMessage(500, ['message' => '上传失败']);
- }
- // $quality = 75;
- // $modal = null;
- // if(($modal = BaseSettingsModel::where('key', env('PHOTO_COMPRESS_QUALITY_KEY'))->first()) != null) {
- // $quality = $modal->value;
- // }
- $real_path = $path . '/' . $md5_filename;
- $url_path = $rel_path . '/' . $md5_filename;
- $source_info = null;
- if(($source_info = getimagesize($real_path)) != null) {
- $source_width = $source_info[0];
- $source_height = $source_info[1];
- \Log::info('$source_width'.$source_width.'$source_height'.$source_height);
- if($sizex || $sizey){
- if($sizex==0){
- $sizex = $source_width*($sizey/$source_height);
- }
- if($sizey==0){
- $sizey = $source_height*($sizex/$source_width);
- }
- \Log::info('$sizex'.$sizex.'$sizey'.$sizey);
- Image::make($real_path)->resize($sizex, $sizey)->save($real_path);
- }
- }
- $attachment = new BaseAttachmentModel();
- $attachment->name = $clientName;
- $attachment->md5 = $md5;
- $attachment->path = $real_path;
- $attachment->url = $url_path;
- $attachment->size = $fileSize;
- $attachment->file_type = $fileMimeType;
- $attachment->class = $class;
- if ($attachment->save()) {
- return $this->_jsonMessage(200, ['message' => "上传成功", 'fileurl' => $url_path,'name'=>$md5_filename]);
- } else {
- @unlink($real_path);
- return $this->_jsonMessage(500, ['message' => '数据库保存错误']);
- // $result= ErrorCode::ATTACHMENT_SAVE_FAILED;
- }
- } catch (FileException $e) {
- return $this->_jsonMessage(500, ['message' => '上传失败']);
- // $result = ErrorCode::ATTACHMENT_MOVE_FAILED;
- }
- }
- /**
- * 删除附件
- *
- * @param $md5 string 删除文件的md5码
- * @return int 错误码or 0(成功)
- */
- public function deleteAttachment($md5) {
- $attachment = $this->_model->where(['md5' => $md5])->first();
- if (!$attachment) {
- return ErrorCode::ATTACHMENT_NOT_EXIST;
- }
- if (file_exists($attachment->path)) {
- if (@unlink($attachment->path)) {
- if ($attachment->delete()) {
- return 0;
- } else {
- return ErrorCode::ATTACHMENT_RECORD_DELETE_FAILED;
- }
- } else {
- return ErrorCode::ATTACHMENT_DELETE_FAILED;
- }
- } else {
- return ErrorCode::ATTACHMENT_NOT_EXIST;
- }
- }
- }
|