uniacid = \YunShop::app()->uniacid ?: 0; $this->set = UploadService::getSetting(); } public function upload() { $file = request()->file('file'); $type = request()->upload_type; $tagId = request()->tag_id; if (!$file) { return $this->errorJson('文件上传失败.'); } if (!$file->isValid()) { return $this->errorJson('文件上传失败.'); } // 获取文件相关信息 $originalName = $file->getClientOriginalName(); // 文件原名 $realPath = $file->getRealPath(); //临时文件的绝对路径 $ext = $file->getClientOriginalExtension(); //文件后缀 $uploadService = new UploadService(); $upload_setting = $uploadService->getSetting(); $auth_uid = \YunShop::app()->uid?:1; global $_W; if ($type == 'image') { try { $upload_res = $uploadService->upload($file, $type); } catch (ShopException $exception) { return $this->errorJson($exception->getMessage()); } if (config('app.framework') == 'platform') { $data = [ 'uniacid' => $this->uniacid, 'uid' => $auth_uid, 'filename' => safe_gpc_html(htmlspecialchars_decode($originalName, ENT_QUOTES)), 'attachment' => $upload_res['relative_path'], 'type' => 1, 'module_upload_dir' => '', 'group_id' => (int)$this->uniacid, 'upload_type' => $upload_setting['remote']['type'], 'tag_id' => $tagId ]; \app\platform\modules\application\models\CoreAttach::create($data); } else { $data = [ 'uniacid' => $this->uniacid, 'uid' => isset($_W['uid']) ? $_W['uid'] : 1, 'filename' => safe_gpc_html(htmlspecialchars_decode($originalName, ENT_QUOTES)), 'attachment' => $upload_res['relative_path'], 'type' => 1, 'createtime' => TIMESTAMP, 'module_upload_dir' => '', 'group_id' => 0, 'tag_id' => $tagId ]; CoreAttach::create($data); } return $this->successJson('上传成功', [ 'name' => $originalName, 'ext' => $ext, 'filename' => $upload_res['file_name'], 'attachment' => $upload_res['relative_path'], 'url' => $upload_res['absolute_path'], 'is_image' => 1, 'filesize' => 'null', 'group_id' => (int)$this->uniacid, 'state' => 'SUCCESS' ]); } elseif ($type == 'video') { try { $upload_res = $uploadService->upload($file, $type, 'videos'); } catch (ShopException $exception) { return $this->errorJson($exception->getMessage()); } if (config('app.framework') == 'platform') { $getID3 = new getID3(); $ThisFileInfo = $getID3->analyze($realPath); //分析文件,$path为音频文件的地址 $timeline = $ThisFileInfo['playtime_seconds']; //这个获得的便是音频文件的时长 $data = [ 'uniacid' => $this->uniacid, 'uid' => $auth_uid, 'filename' => safe_gpc_html(htmlspecialchars_decode($originalName, ENT_QUOTES)), 'attachment' => $upload_res['relative_path'], 'type' => 3, 'module_upload_dir' => '', 'group_id' => (int)$this->uniacid, 'upload_type' => $upload_setting['remote']['type'], 'tag_id' => $tagId, 'timeline' => $timeline ]; \app\platform\modules\application\models\CoreAttach::create($data); return $this->successJson('上传成功', [ 'name' => $originalName, 'ext' => $ext, 'filename' => $upload_res['file_name'], 'attachment' => $upload_res['relative_path'], 'url' => $upload_res['absolute_path'], 'is_image' => 0, 'filesize' => 'null', 'group_id' => (int)$this->uniacid, 'timeline' => $timeline ]); } else { $getID3 = new getID3(); $ThisFileInfo = $getID3->analyze($realPath); //分析文件,$path为音频文件的地址 $timeline=$ThisFileInfo['playtime_seconds']; //这个获得的便是音频文件的时长 $data = [ 'uniacid' => $this->uniacid, 'uid' => isset($_W['uid']) ? $_W['uid'] : 1, 'filename' => safe_gpc_html(htmlspecialchars_decode($originalName, ENT_QUOTES)), 'attachment' => $upload_res['relative_path'], 'type' => 3, 'createtime' => TIMESTAMP, 'module_upload_dir' => '', 'group_id' => 0, 'tag_id' => $tagId, 'timeline' => $timeline ]; CoreAttach::create($data); return $this->successJson('上传成功', [ 'name' => $originalName, 'ext' => $ext, 'filename' => $upload_res['file_name'], 'attachment' => $upload_res['relative_path'], 'url' => $upload_res['absolute_path'], 'is_image' => 0, 'filesize' => 'null', 'group_id' => (int)$this->uniacid, ]); } } elseif ($type == 'audio') { try { $upload_res = $uploadService->upload($file, $type, 'audios'); } catch (ShopException $exception) { return $this->errorJson($exception->getMessage()); } if (config('app.framework') == 'platform') { $getID3 = new getID3(); $ThisFileInfo = $getID3->analyze($realPath); //分析文件,$path为音频文件的地址 $timeline = $ThisFileInfo['playtime_seconds']; //这个获得的便是音频文件的时长 $data = [ 'uniacid' => $this->uniacid, 'uid' => $auth_uid, 'filename' => safe_gpc_html(htmlspecialchars_decode($originalName, ENT_QUOTES)), 'attachment' => $upload_res['relative_path'], 'type' => 2, 'module_upload_dir' => '', 'group_id' => (int)$this->uniacid, 'upload_type' => $upload_setting['remote']['type'], 'tag_id' => $tagId, 'timeline' => $timeline ]; \app\platform\modules\application\models\CoreAttach::create($data); return $this->successJson('上传成功', [ 'name' => $originalName, 'ext' => $ext, 'filename' => $upload_res['file_name'], 'attachment' => $upload_res['relative_path'], 'url' => $upload_res['absolute_path'], 'is_image' => 0, 'filesize' => 'null', 'group_id' => (int)$this->uniacid, 'timeline' => $timeline ]); } else { $getID3 = new getID3(); $ThisFileInfo = $getID3->analyze($realPath); //分析文件,$path为音频文件的地址 $timeline = $ThisFileInfo['playtime_seconds']; //这个获得的便是音频文件的时长 $data = [ 'uniacid' => $this->uniacid, 'uid' => isset($_W['uid']) ? $_W['uid'] : 1, 'filename' => safe_gpc_html(htmlspecialchars_decode($originalName, ENT_QUOTES)), 'attachment' => $upload_res['relative_path'], 'type' => 2, 'createtime' => TIMESTAMP, 'module_upload_dir' => '', 'group_id' => 0, 'tag_id' => $tagId, 'timeline' => $timeline ]; CoreAttach::create($data); return $this->successJson('上传成功', [ 'name' => $originalName, 'ext' => $ext, 'filename' => $upload_res['file_name'], 'attachment' => $upload_res['relative_path'], 'url' => $upload_res['absolute_path'], 'is_image' => 0, 'filesize' => 'null', 'group_id' => (int)$this->uniacid, ]); } } elseif ($type == 'file') { try { $upload_res = $uploadService->upload($file, $type, 'files'); } catch (ShopException $exception) { return $this->errorJson($exception->getMessage()); } return $this->successJson('上传成功', [ 'name' => $originalName, 'ext' => $ext, 'filename' => $upload_res['file_name'], 'attachment' => $upload_res['relative_path'], 'url' => $upload_res['absolute_path'], 'is_image' => 0, 'filesize' => 'null', 'group_id' => (int)$this->uniacid, ]); } return true; } public function fetch() { $url = trim(request()->url); $resp = ihttp_get($url); if (!$resp) { return $this->errorJson('提取文件失败'); } if (strexists($resp['headers']['Content-Type'], 'image')) { switch ($resp['headers']['Content-Type']) { case 'application/x-jpg': case 'image/jpeg': $ext = 'jpg'; break; case 'image/png': $ext = 'png'; break; case 'image/gif': $ext = 'gif'; break; default: return $this->errorJson('提取资源失败, 资源文件类型错误.'); break; } } else { return $this->errorJson('提取资源失败, 仅支持图片提取.'); } $originName = pathinfo($url, PATHINFO_BASENAME); $newOriginalName = md5($originName . str_random(6)) . '.' . $ext; //本地上传 $result = \Storage::disk('image')->put($newOriginalName, $resp['content']); if (!$result) { return $this->successJson('上传失败'); } $url = \Storage::disk('image')->url($newOriginalName); if (config('app.framework') == 'platform') { $remote = $this->set['remote']; $data = [ 'uniacid' => $this->uniacid, 'uid' => \YunShop::app()->uid, 'filename' => $newOriginalName, 'attachment' => $url, 'type' => 1, 'module_upload_dir' => '', 'group_id' => intval($this->uniacid), 'upload_type' => $remote['type'], 'tag_id' => 0 ]; \app\platform\modules\application\models\CoreAttach::create($data); //远程上传 if ($remote['type'] != 0) { file_remote_upload($url, true, $remote); } return $this->successJson('上传成功', [ 'img' => $url, 'img_url' => yz_tomedia($url), ]); } else { //全局配置 global $_W; $remote = $this->set['remote']; $data = [ 'uniacid' => $this->uniacid, 'uid' => isset($_W['uid']) ? $_W['uid'] : 1, 'filename' => $newOriginalName, 'attachment' => $url, 'type' => 1, 'createtime' => TIMESTAMP, 'module_upload_dir' => '', 'group_id' => 0, 'tag_id' => 0 ]; CoreAttach::create($data); //远程上传 if ($remote['type'] != 0) { file_remote_upload_wq($url, true, $remote); } return $this->successJson('上传成功', [ 'img' => $url, 'img_url' => yz_tomedia($url), ]); } } public function getImage() { if (config('app.framework') == 'platform') { $result = $this->getNewImage(); } else { $result = $this->getWqImageV2(); } return $this->successJson('ok', $result); } public function getWqImageV2() { $year = request()->year; $month = intval(request()->month); $pageSize = request()->pageSize; $core_attach = new CoreAttach; $core_attach = $core_attach->where('uniacid', $this->uniacid); $tagId = request()->tag_id; if (is_numeric($tagId)) { if ($tagId === 0) { $core_attach = $core_attach->where(function($query) { $query->where('tag_id', 0)->orWhere('tag_id', null); }); } else { $core_attach = $core_attach->where('tag_id', $tagId); } } global $_W; if (\YunShop::app()->isfounder !== true) { $core_attach = $core_attach->where('uid', $_W['uid']?:1); } if ($year || $month) { $start_time = $month ? strtotime("{$year}-{$month}-01") : strtotime("{$year}-1-01"); $end_time = $month ? strtotime('+1 month', $start_time) : strtotime('+12 month', $start_time); $core_attach = $core_attach->where('createtime', '>=', $start_time)->where('createtime', '<=', $end_time); } $core_attach = $core_attach->select('id','attachment')->where('type', 1); $core_attach = $core_attach->orderby('createtime', 'desc')->orderby('id', 'desc'); $core_attach->search(request()->date); $core_attach = $core_attach->paginate($pageSize); if (!empty($core_attach)) { $core_attach = $core_attach->toArray(); } foreach ($core_attach['data'] as &$attach) { $attach['attach'] = yz_tomedia($attach['attachment']); $attach['url'] = $attach['attach']; } return $core_attach; } public function getWqImage() { $year = request()->year; $month = intval(request()->month); $page = max(1, intval(request()->page)); $page_size = 33; if ($page <= 1) { $page = 0; $offset = ($page)*$page_size; } else { $offset = ($page-1)*$page_size; } $core_attach = new CoreAttach; $core_attach = $core_attach->where('uniacid', $this->uniacid); global $_W; if (\YunShop::app()->isfounder !== true) { $core_attach = $core_attach->where('uid', $_W['uid']?:1); } if ($year || $month) { $start_time = $month ? strtotime("{$year}-{$month}-01") : strtotime("{$year}-1-01"); $end_time = $month ? strtotime('+1 month', $start_time) : strtotime('+12 month', $start_time); $core_attach = $core_attach->where('createtime', '>=', $start_time)->where('createtime', '<=', $end_time); } $core_attach->search(request()->date); $core_attach = $core_attach->where('type', 1); $core_attach = $core_attach->orderby('createtime', 'desc'); $count = $core_attach->count(); $core_attach = $core_attach->offset($offset)->limit($page_size)->get(); foreach ($core_attach as &$attach) { $attach['attach'] = yz_tomedia($attach['attachment']); $attach['url'] = $attach['attach']; } $pager = pagination($count, $page, $page_size,'',$context = array('before' => 5, 'after' => 4, 'isajax' => '1')); $result = array('items' => $core_attach, 'pager' => $pager); iajax(0, $result); } public function getNewImage() { $core_attach = new \app\platform\modules\application\models\CoreAttach(); $pageSize = request()->pageSize; $core_attach = $core_attach->search(request()->date)->where('uniacid', $this->uniacid)->where('type', 1); if ($tagId = request()->tag_id AND is_numeric($tagId)) { if ($tagId === 0) { $core_attach = $core_attach->where(function($query) { $query->where('tag_id', 0)->orWhere('tag_id', null); }); } else { $core_attach = $core_attach->where('tag_id', $tagId); } } if (\YunShop::app()->isfounder !== true) { $core_attach = $core_attach->where('uid', \YunShop::app()->uid); } $core_attach = $core_attach->select('id','attachment','filename') ->orderby('created_at', 'desc') ->orderby('id', 'desc') ->paginate($pageSize); foreach ($core_attach as &$attach) { $attach['url'] = yz_tomedia($attach['attachment']); } return $core_attach; } public function getVideo() { $date = request()->date; $tag_id = request()->tag_id; $page_size = request()->pageSize; $search = ['year'=>$date['year'],'month'=>$date['month'],'tag_id'=>$tag_id]; if (config('app.framework') == 'platform') { $core_attach = \app\platform\modules\application\models\CoreAttach::search($search); $core_attach = $core_attach->orderby('created_at', 'desc'); } else { $core_attach = CoreAttach::search($search); $core_attach = $core_attach->orderby('createtime', 'desc'); } $core_attach = $core_attach->where('type', 3)->paginate($page_size); foreach ($core_attach as &$attach) { $attach['url'] = yz_tomedia($attach['attachment']); } return $this->successJson('ok', $core_attach); } public function getAudio() { if (config('app.framework') == 'platform') { $core_attach = new \app\platform\modules\application\models\CoreAttach(); if (request()->year != '不限') { $search['year'] = request()->year; } if (request()->month != '不限') { $search['month'] = request()->month; } $pageSize = request()->pageSize; $core_attach = $core_attach->search($search)->where('uniacid', $this->uniacid); $tagTitle = ''; if ($tagId = request()->tag_id AND !empty($tagId)) { $core_attach->where('tag_id', $tagId); $tag = CoreAttachTags::find($tagId); $tagTitle = $tag?$tag->title:''; } if ($tagTitle != '未分组') { $core_attach = $core_attach->where('uid', \YunShop::app()->uid); } //type = 2 音频 $core_attach = $core_attach->where('type', 2); $core_attach = $core_attach->orderby('created_at', 'desc')->paginate($pageSize); foreach ($core_attach as &$attach) { $attach['url'] = yz_tomedia($attach['attachment']); } return $this->successJson('ok', $core_attach); } else { $core_attach = new CoreAttach(); $page_index = max(1, request()->page); $page_size = 5; if ($page_index <= 1) { $page_index = 0; $offset = $page_index * $page_size; } else { $offset = ($page_index - 1) * $page_size; } $core_attach = $core_attach->where(['type'=>2,'uniacid'=>$this->uniacid]); if (!$this->uniacid) { $core_attach = $core_attach->where('uid', \YunShop::app()->uid); } $total = $core_attach->count(); if (request()->platform_type == '1') { $search['year'] = request()->year; $search['month'] = request()->month; $list = $core_attach->search($search)->orderby('createtime', 'desc')->paginate(8); $list->map(function ($l) { $l->url = yz_tomedia($l->attachment); }); return $this->successJson('ok', $list); } $core_attach = $core_attach->orderby('createtime', 'desc')->offset($offset)->limit(24)->get(); foreach ($core_attach as &$attach) { $attach['url'] = yz_tomedia($attach['attachment']); } $pager = pagination($total, 1, 24, '', $context = array('before' => 5, 'after' => 4, 'isajax' => '1')); $result = array('items' => $core_attach, 'pager' => $pager); iajax(0, $result); } return true; } public function delete() { $id = request()->id; if (!is_array($id)) { $id = array(intval($id)); } $id = safe_gpc_array($id); if (config('app.framework') == 'platform') { $core_attach = \app\platform\modules\application\models\CoreAttach::find($id); if ($core_attach['upload_type']) { $status = file_remote_delete($core_attach['attachment'], $core_attach['upload_type'], $this->set['remote']); } else { $status = file_delete($core_attach['attachment']); } if (is_error($status)) { return $this->errorJson($status['message']); } if (!$core_attach->delete()) { return $this->errorJson('删除数据表数据失败'); } return $this->successJson('删除成功'); } else { $core_attach = CoreAttach::find($id); if ($core_attach['upload_type']) { $status = file_remote_delete($core_attach['attachment']); } else { $status = file_delete($core_attach['attachment']); } if (is_error($status)) { return $this->errorJson($status['message']); } if (!$core_attach->delete()) { return $this->errorJson('删除数据表数据失败'); } return $this->successJson('删除成功'); } } }