123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- <?php
- /**
- * Created by PhpStorm.
- * User: 中闽 < 1464674022@qq.com >
- * Date: 2019/12/5
- * Time: 17:44
- */
- namespace app\admin\controller;
- use app\admin\controller\base\Permissions;
- use app\common\model\FileManageModel;
- use app\common\service\UploadService;
- use file\DirHelper;
- use file\FileHelper;
- use file\ImgHelper;
- use file\PathHelper;
- use file\ZipHelper;
- use network\FtpHelper;
- use think\Env;
- use think\Exception;
- use think\Log;
- class FileManage extends Permissions
- {
- public function index()
- {
- $relativePath = $this->request->param('relative_path', '', 'replaceDS,deleteEndDS');
- $this->assign('relative_path', $relativePath);
- if ($this->request->isAjax()) {
- $keyword = $this->request->param('keyword', '', 'trim');
- if (ifContain($keyword, DS)) {
- if (ifContain($keyword, FileManageModel::getRootDir())) {
- $keyword = str_replace(FileManageModel::getRootDir(), '', $keyword);
- } else {
- $keyword = deleteStartDS($keyword);
- }
- if (file_exists(FileManageModel::getRootDir() . $keyword)) {
- if (is_dir(FileManageModel::getRootDir() . $keyword)) {
- $relativePath2 = $keyword;
- } else {
- $relativePath2 = PathHelper::getParentDir($keyword);
- }
- if ($relativePath != $relativePath2) {
- $this->success($relativePath2, 'index');
- } else {
- $keyword = PathHelper::getFilename($keyword);
- }
- }
- }
- $data = FileManageModel::getFileList(trim($keyword), $relativePath);
- return array('code' => 0, 'data' => $data);
- } else {
- $this->assign('fullPath', appendEndDS(appendEndDS(FileManageModel::getRootDir()) . $relativePath));
- $arr = explode(DS, $relativePath);
- $parentPath = end($arr) == $relativePath ? "" : str_replace(DS . end($arr), '', $relativePath);
- $this->assign('parentPath', $parentPath);
- return $this->fetch();
- }
- }
- public function publish()
- {
- $rootpath = FileManageModel::getRootDir();
- $relativePath = $this->request->param('relative_path', '', 'replaceDS');
- $this->assign('relative_path', $relativePath);
- $post = $this->request->post();
- $fullname = $this->request->param('fullname');//文件名
- $name = $this->request->param('name');//新增模板名
- if ($fullname) {
- //修改操作
- $filePath = $rootpath . DS . $relativePath . DS . $fullname;
- if ($this->request->isPost()) {
- $getfilemtime = $this->request->param('filemtime');
- if ($getfilemtime != filemtime($filePath)) {
- $this->error('文件版本不正确,请刷新后重新提交');
- }
- try {
- FileHelper::save($filePath, $post['content']);
- } catch (\Exception $e) {
- $this->error('修改失败.' . $e->getMessage());
- }
- $this->success('修改成功', '', filemtime($filePath));
- } else {
- if (file_exists($filePath)) {
- if (is_dir($filePath)) {
- $this->error('不可以编辑目录');
- }
- if (ImgHelper::isImage($filePath)) {
- $this->error('不可以编辑图片');
- }
- $this->assign('fullname', $fullname);
- $this->assign('filemtime', filemtime($filePath));
- $this->assign('content', FileHelper::read($filePath));
- return $this->fetch();
- } else {
- $this->error('文件不存在');
- }
- }
- } else {
- //新增操作
- if ($this->request->isPost()) {
- $validate = new \think\Validate([
- ['name|模板名称', 'require'],
- ]);
- if (!$validate->check($post)) {
- $this->error('提交失败:' . $validate->getError());
- }
- $filePath = $rootpath . DS . $relativePath . DS . $name;
- if (file_exists($filePath)) {
- $this->error('该文件已存在,请修改名称');
- } else {
- try {
- FileHelper::save($filePath, $post['content']);
- } catch (\Exception $e) {
- $this->error('添加失败.' . $e->getMessage());
- }
- }
- $this->success('添加成功', 'index', ['relative_path' => $relativePath]);
- } else {
- return $this->fetch();
- }
- }
- }
- public function delete()
- {
- if ($this->request->isAjax()) {
- $rootpath = FileManageModel::getRootDir();
- $fullname = $this->request->param('fullname');
- $relativePath = $this->request->param('relative_path', '', 'replaceDS');
- $fullpath = $rootpath . DS . $relativePath . DS . $fullname;
- if (!file_exists($fullpath)) {
- $this->error('文件不存在');
- }
- if (is_dir($fullpath)) {
- DirHelper::delDir($fullpath);
- if (file_exists($fullpath)) {
- $this->error("删除失败,请检查目录权限");
- }
- $this->success('删除成功', 'index');
- } else {
- if (false == unlink($fullpath)) {
- $this->error('删除失败');
- } else {
- $this->success('删除成功', 'index');
- }
- }
- }
- }
- public function rename()
- {
- if ($this->request->isAjax()) {
- $relativePath = $this->request->param('relative_path', '', 'replaceDS');
- $oldname = $this->request->param('oldname');
- $newname = $this->request->param('newname');
- $rootpath = FileManageModel::getRootDir();
- if (file_exists($rootpath . DS . $newname)) {
- $this->error('文件已存在');
- }
- if (FileHelper::rename($rootpath . DS . $relativePath . DS . $oldname, $rootpath . DS . $relativePath . DS . $newname)) {
- $this->success('重命名成功', 'index');
- } else {
- $this->error('重命名失败');
- }
- }
- }
- public function upload()
- {
- //html目录
- $rootpath = FileManageModel::getRootDir();
- //相对路径
- $relativePath = $this->request->param('relative_path', '', 'replaceDS');
- (new UploadService())->upload2path(appendEndDS(appendEndDS($rootpath) . $relativePath));
- }
- public function createDir()
- {
- $name = $this->request->param('name');
- //根目录
- $rootpath = FileManageModel::getRootDir();
- //根目录下的相对路径
- $relativePath = $this->request->param('relative_path', '', 'replaceDS');
- if (true === DirHelper::makeDir($rootpath . DS . $relativePath . DS . $name)) {
- $this->success('执行成功');
- } else {
- $this->error('执行失败');
- }
- }
- public function unzip()
- {
- $post = $this->request->param();
- $file_list = $post['file_list'];
- $relativePath = $this->request->param('relative_path', '', 'replaceDS');
- $rootPath = FileManageModel::getRootDir();
- try {
- foreach ($file_list as $filename) {
- $source = $rootPath . DS . ($relativePath ? $relativePath . DS . $filename : $filename);
- $dest = $rootPath . DS . $relativePath;
- if (ifContain($source, '.zip')) {
- if (false === (new ZipHelper())->unzip_gbk($source, $dest)) {
- throw new \Exception('解压失败');
- }
- }
- }
- } catch (Exception $e) {
- $this->error($e->getMessage());
- }
- $this->success('执行成功');
- }
- /**
- * 上传到ftp ,要防止数据量过多
- */
- public function ftpCover()
- {
- $post = $this->request->param();
- $file_list = $post['file_list'];
- $relativePath = $this->request->param('relative_path', '', 'replaceDS');
- //
- $rootPath = FileManageModel::getRootDir();
- $ftpHost = Env::get('article_ftp_host', '127.0.0.1');
- $ftpPort = Env::get('article_ftp_port', 21);
- $ftpUser = Env::get('article_ftp_user', 'username');
- $ftpPwd = Env::get('article_ftp_pwd', 'password');
- $ftpWebroot = Env::get('article_ftp_webroot', '');
- if (empty($ftpHost)) {
- $this->error('请先配置ftp');
- }
- try {
- $ftp = new FtpHelper();
- $ftp->connect($ftpHost, $ftpUser, $ftpPwd, $ftpPort);
- //设置根目录
- if ($ftpWebroot) {
- $ftp->cd($ftpWebroot);
- }
- foreach ($file_list as $filename) {
- $upDownPath = $rootPath . DS . ($relativePath ? $relativePath . DS . $filename : $filename);
- if (is_file($upDownPath)) {
- Log::log($upDownPath);
- $ftp->mkdir($relativePath);//新建远程目录
- $ftp->upload($relativePath . DS . $filename, $upDownPath);
- } else {
- $this->ftpUpload($upDownPath, $rootPath, $ftp);
- }
- }
- } catch (Exception $e) {
- $this->error($e->getMessage());
- }
- $this->success('执行成功');
- }
- /**
- * 递归上传ftp
- * @param $dir [要上传的文件或目录的物理路径]
- * @param $rootPath [本地根目录]
- * @param $ftp FtpHelper
- */
- private function ftpUpload($dir, $rootPath, $ftp)
- {
- Log::log($dir);
- if (file_exists($dir)) {
- $ftpDir = replaceUrlDS(str_replace($rootPath, '', $dir));
- if ($ftpDir) {
- $ftp->mkdir($ftpDir);//新建远程目录
- }
- $mydir = dir($dir);
- while (false !== ($file = $mydir->read())) {
- if ($file != "." && $file != "..") {
- $path = $dir . DS . $file;
- if (is_dir($path)) {
- $this->ftpUpload($path, $rootPath, $ftp);
- } else {
- // if (time() - filemtime($path) <= 3600 * 24) {//修改时间是否超过24小时
- Log::log($path);
- $ftp->upload($ftpDir . DS . $file, $path);
- // }
- }
- }
- }
- $mydir->close();
- }
- }
- }
|