用thinkphp做了一个多商户的系统,商户在发布信息的时候,希望能将上传的图片放在各商户单独的文件夹里。
思路:
1、thinkphp里面将商户id写入session
2、uedito下面的php文件读取session,然后再上传图片的时候,取出这个参数,插入到附件上传地址的配置里面。
具体实现:
1、商户编辑内容的模板里面,用js执行一个php文件,写入session(因为thinkphp里面写入的session在框架外无法取得,所以用了一个中间文件1.php,执行1.php?companyid=XX,用get方式取得参数,就可以写到session里面)。
模板文件里面的代码:
<script src="/1.php?myadmincompanydir={:hashids_encode($myadmincompany.id)}"></script>
1.php里面的代码
session_start(); //开启session
$_SESSION['myadmincompanydir'] = $_GET['myadmincompanydir'];//取得传递过来的参数,写入session
2、修改ueditor下面的文件。
上传附件的路径配置,默认实在config.json文件下面,这个文件保存的是json格式的配置内容。
这里,我新建了一个config.php文件,将上面文件的json转成数组后放在config.php文件里面。
config.php的代码如下:
<?php
/* 前后端通信相关的配置,注释只允许使用多行方式 */
return [
/* 上传图片配置项 */
"imageActionName"=>"uploadimage", /* 执行上传图片的action名称 */
"imageFieldName"=>"upfile", /* 提交的图片表单名称 */
"imageMaxSize"=>2048000, /* 上传大小限制,单位B */
"imageAllowFiles"=>[".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
"imageCompressEnable"=>true, /* 是否压缩图片,默认是true */
"imageCompressBorder"=>1600, /* 图片压缩最长边限制 */
"imageInsertAlign"=>"none", /* 插入的图片浮动方式 */
"imageUrlPrefix"=>"", /* 图片访问路径前缀 */
"imagePathFormat"=>"/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
/* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
/* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
/* {time} 会替换成时间戳 */
/* {yyyy} 会替换成四位年份 */
/* {yy} 会替换成两位年份 */
/* {mm} 会替换成两位月份 */
/* {dd} 会替换成两位日期 */
/* {hh} 会替换成两位小时 */
/* {ii} 会替换成两位分钟 */
/* {ss} 会替换成两位秒 */
/* 非法字符 \ =>* ? " < > | */
/* 具请体看线上文档=>fex.baidu.com/ueditor/#use-format_upload_filename */
/* 涂鸦图片上传配置项 */
"scrawlActionName"=>"uploadscrawl", /* 执行上传涂鸦的action名称 */
"scrawlFieldName"=>"upfile", /* 提交的图片表单名称 */
"scrawlPathFormat"=>"/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"scrawlMaxSize"=>2048000, /* 上传大小限制,单位B */
"scrawlUrlPrefix"=>"", /* 图片访问路径前缀 */
"scrawlInsertAlign"=>"none",
/* 截图工具上传 */
"snapscreenActionName"=>"uploadimage", /* 执行上传截图的action名称 */
"snapscreenPathFormat"=>"/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"snapscreenUrlPrefix"=>"", /* 图片访问路径前缀 */
"snapscreenInsertAlign"=>"none", /* 插入的图片浮动方式 */
/* 抓取远程图片配置 */
"catcherLocalDomain"=>["127.0.0.1", "localhost", "img.baidu.com"],
"catcherActionName"=>"catchimage", /* 执行抓取远程图片的action名称 */
"catcherFieldName"=>"source", /* 提交的图片列表表单名称 */
"catcherPathFormat"=>"/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"catcherUrlPrefix"=>"", /* 图片访问路径前缀 */
"catcherMaxSize"=>2048000, /* 上传大小限制,单位B */
"catcherAllowFiles"=>[".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
/* 上传视频配置 */
"videoActionName"=>"uploadvideo", /* 执行上传视频的action名称 */
"videoFieldName"=>"upfile", /* 提交的视频表单名称 */
"videoPathFormat"=>"/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"videoUrlPrefix"=>"", /* 视频访问路径前缀 */
"videoMaxSize"=>102400000, /* 上传大小限制,单位B,默认100MB */
"videoAllowFiles"=>[
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
/* 上传文件配置 */
"fileActionName"=>"uploadfile", /* controller里,执行上传视频的action名称 */
"fileFieldName"=>"upfile", /* 提交的文件表单名称 */
"filePathFormat"=>"/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"fileUrlPrefix"=>"", /* 文件访问路径前缀 */
"fileMaxSize"=>51200000, /* 上传大小限制,单位B,默认50MB */
"fileAllowFiles"=>[
".png", ".jpg", ".jpeg", ".gif", ".bmp",
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
], /* 上传文件格式显示 */
/* 列出指定目录下的图片 */
"imageManagerActionName"=>"listimage", /* 执行图片管理的action名称 */
"imageManagerListPath"=>"/upload/image/", /* 指定要列出图片的目录 */
"imageManagerListSize"=>20, /* 每次列出文件数量 */
"imageManagerUrlPrefix"=>"", /* 图片访问路径前缀 */
"imageManagerInsertAlign"=>"none", /* 插入的图片浮动方式 */
"imageManagerAllowFiles"=>[".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
/* 列出指定目录下的文件 */
"fileManagerActionName"=>"listfile", /* 执行文件管理的action名称 */
"fileManagerListPath"=>"/upload/file/", /* 指定要列出文件的目录 */
"fileManagerUrlPrefix"=>"", /* 文件访问路径前缀 */
"fileManagerListSize"=>20, /* 每次列出文件数量 */
"fileManagerAllowFiles"=>[
".png", ".jpg", ".jpeg", ".gif", ".bmp",
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
] /* 列出的文件类型 */
]
?>
可以看到,默认的路径是在/upload/文件下。
然后修改controller.php文件
<?php
//header('Access-Control-Allow-Origin: http://www.baidu.com'); //设置http://www.baidu.com允许跨域访问
//header('Access-Control-Allow-Headers: X-Requested-With,X_Requested_With'); //设置允许的跨域header
date_default_timezone_set("Asia/chongqing");
error_reporting(E_ERROR);
header("Content-Type: text/html; charset=utf-8");
$CONFIG = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents("config.json")), true);//这是默认的读取config.json的语句
/*以下是自定义的代码,从config.php读取配置参数,然后从session读取当前商户的附件存放目录,然后做一下替换
*/
$CONFIG = include("config.php");
session_start(); //开启session
$dir = $_SESSION['myadmincompanydir'];
$CONFIG = str_replace('/upload/','/upload/attachment/com'.$dir.'/',$CONFIG);
/*
添加的代码结束
*/
//var_dump($CONFIG);exit;
$action = $_GET['action'];
switch ($action) {
case 'config':
$result = json_encode($CONFIG);
代码修改完毕。
3、测试
进入商户发布信息或编辑信息页面
控制台可以看到目录已经变更多来了。
再上传一张图试一下,查看图片的路径,可以看到,已经修改成功。
截屏贴一张进去看看
可以看到,地址也更新了。
修改完毕,记录一下,免得后面忘记了。