框架发布

框架发布

最新版本发布信息
提问交流

提问交流

使用问题咨询
经验分享

经验分享

开发经验交流分享
功能建议

功能建议

官方开发功能建议
BUG反馈

BUG反馈

使用BUG反馈
模块&插件&数据包

模块&插件&数据包

模块插件数据包分享

本地文件同步海豚附件方法

经验分享yangweijie 发表了文章 • 0 个评论 • 561 次浏览 • 2020-06-04 16:12 • 来自相关话题

use app\admin\model\Attachment;


public function local_upload($dir = ''){
if($dir){
if(!is_dir($dir)){
$this->error('路径不存在');
}
set_time_limit(0);
ini_set('memory_limit', '3072M');
$reload = url();
if($this->request->isPost()){
$ids = input('ids/a', []);
if($ids){
foreach ($ids as $key => $path) {
$md5 = md5_file($path);
$exist = Attachment::where('md5', $md5)->find();
if($exist){
if(is_file($exist['path'])){
;
}else{
copy($path, $exist['path']);
}
}else{
$target_dir = 'uploads/files/'.date('Ymd');
if(!is_dir($target_dir)){
mkdir($target_dir);
}
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $path);
$target = $target_dir . DIRECTORY_SEPARATOR.md5((string) microtime(true)).'.'.pathinfo($path, PATHINFO_EXTENSION);
copy($path, $target);
$file_name = pathinfo($path, PATHINFO_BASENAME);
$file_info = [
'uid' => session('user_auth.uid'),
'name' => $file_name,
'mime' => $mime,
'path' => str_replace('\\', '/', $target),
'ext' => pathinfo($file_name, PATHINFO_EXTENSION),
'size' => filesize($path),
'md5' => md5_file($path),
'sha1' => sha1_file($path),
'thumb' => '',
'module' => 'admin',
'width' => '',
'height' => '',
];
Attachment::create($file_info);
}
}
$this->success('同步成功');
}else{
$this->error('请至少选择一个文件');
}
}
$current_dir = getcwd();
chdir($dir);
$data_list = [];
$files = glob('*.*');
chdir($current_dir);
if($files){
foreach ($files as $key => $file) {
$file = $dir.DIRECTORY_SEPARATOR.$file;
$type = is_dir(realpath($file))?'dir':'file';
if($type == 'file'){
$md5 = md5_file($file);
$exist = Attachment::where('md5', $md5)->find();
}else{
$md5 = '';
$exist = [];
}
$data_list[] = [
'index' => $key,
'md5' => $md5,
'path' => realpath($file),
'type' => is_dir(realpath($file))?'dir':'file',
'size' => filesize($file),
'status' => $exist? is_file($exist['path'])?'已同步'.$exist['id'] :'待恢复'.$exist['id']: '未同步',
];
}
}
$parent_dir = dirname($dir, 1);
$parent_dir = url('local_upload', ['dir'=>$parent_dir]);
$js = <<<JS
<script>
function browser(index){
\$path = \$.trim(\$('#builder-table table tbody tr').eq(index).find('td:eq(1) div').text());
location.href = '{$reload}'.replace('.html', '?dir='+\$path);
}
</script>
JS;
return ZBuilder::make('table')
->setTableName(true)
->addTopButton('upload', ['title'=>'同步', 'href'=>url('local_upload', ['dir'=>$dir]), 'class'=>'btn btn-default ajax-post'])
->addColumns([
// ['index', 'index', 'hidden'],
['path', 'path'],
['md5', 'md5'],
['size', 'size'],
['status', '状态'],
['right_button', '操作'],
])
->setPrimaryKey('path')
->setPageTips("当前路径为:{$dir}, <a href='{$parent_dir}'>返回上一级</a> <a href='{$reload}'>重新浏览</a>")
->addRightButton('sub_dir', [
'icon' => 'fa fa-fw fa-inbox',
'title' => '浏览子目录',
'href' => 'javascript:browser(__index__)',
])
->setExtraJs($js)
->replaceRightButton(['type'=>'file'], '', ['sub_dir'])
->setRowList($data_list)
->fetch(); // 渲染模板
}else{
return ZBuilder::make('form')
->setPageTips('请填写要同步的本地目录')
->addFormItems([
['text','dir', '待匹配的目录', '绝对路径格式'],
])
->method('get')
->isAjax(false)
->fetch();
}
}上面是attachment 模型里加的获取器
 
然后自己加个节点 使用就好,
  查看全部
use app\admin\model\Attachment;


public function local_upload($dir = ''){
if($dir){
if(!is_dir($dir)){
$this->error('路径不存在');
}
set_time_limit(0);
ini_set('memory_limit', '3072M');
$reload = url();
if($this->request->isPost()){
$ids = input('ids/a', []);
if($ids){
foreach ($ids as $key => $path) {
$md5 = md5_file($path);
$exist = Attachment::where('md5', $md5)->find();
if($exist){
if(is_file($exist['path'])){
;
}else{
copy($path, $exist['path']);
}
}else{
$target_dir = 'uploads/files/'.date('Ymd');
if(!is_dir($target_dir)){
mkdir($target_dir);
}
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $path);
$target = $target_dir . DIRECTORY_SEPARATOR.md5((string) microtime(true)).'.'.pathinfo($path, PATHINFO_EXTENSION);
copy($path, $target);
$file_name = pathinfo($path, PATHINFO_BASENAME);
$file_info = [
'uid' => session('user_auth.uid'),
'name' => $file_name,
'mime' => $mime,
'path' => str_replace('\\', '/', $target),
'ext' => pathinfo($file_name, PATHINFO_EXTENSION),
'size' => filesize($path),
'md5' => md5_file($path),
'sha1' => sha1_file($path),
'thumb' => '',
'module' => 'admin',
'width' => '',
'height' => '',
];
Attachment::create($file_info);
}
}
$this->success('同步成功');
}else{
$this->error('请至少选择一个文件');
}
}
$current_dir = getcwd();
chdir($dir);
$data_list = [];
$files = glob('*.*');
chdir($current_dir);
if($files){
foreach ($files as $key => $file) {
$file = $dir.DIRECTORY_SEPARATOR.$file;
$type = is_dir(realpath($file))?'dir':'file';
if($type == 'file'){
$md5 = md5_file($file);
$exist = Attachment::where('md5', $md5)->find();
}else{
$md5 = '';
$exist = [];
}
$data_list[] = [
'index' => $key,
'md5' => $md5,
'path' => realpath($file),
'type' => is_dir(realpath($file))?'dir':'file',
'size' => filesize($file),
'status' => $exist? is_file($exist['path'])?'已同步'.$exist['id'] :'待恢复'.$exist['id']: '未同步',
];
}
}
$parent_dir = dirname($dir, 1);
$parent_dir = url('local_upload', ['dir'=>$parent_dir]);
$js = <<<JS
<script>
function browser(index){
\$path = \$.trim(\$('#builder-table table tbody tr').eq(index).find('td:eq(1) div').text());
location.href = '{$reload}'.replace('.html', '?dir='+\$path);
}
</script>
JS;
return ZBuilder::make('table')
->setTableName(true)
->addTopButton('upload', ['title'=>'同步', 'href'=>url('local_upload', ['dir'=>$dir]), 'class'=>'btn btn-default ajax-post'])
->addColumns([
// ['index', 'index', 'hidden'],
['path', 'path'],
['md5', 'md5'],
['size', 'size'],
['status', '状态'],
['right_button', '操作'],
])
->setPrimaryKey('path')
->setPageTips("当前路径为:{$dir}, <a href='{$parent_dir}'>返回上一级</a> <a href='{$reload}'>重新浏览</a>")
->addRightButton('sub_dir', [
'icon' => 'fa fa-fw fa-inbox',
'title' => '浏览子目录',
'href' => 'javascript:browser(__index__)',
])
->setExtraJs($js)
->replaceRightButton(['type'=>'file'], '', ['sub_dir'])
->setRowList($data_list)
->fetch(); // 渲染模板
}else{
return ZBuilder::make('form')
->setPageTips('请填写要同步的本地目录')
->addFormItems([
['text','dir', '待匹配的目录', '绝对路径格式'],
])
->method('get')
->isAjax(false)
->fetch();
}
}
上面是attachment 模型里加的获取器
 
然后自己加个节点 使用就好,
 

呼叫系统crm出售

回复

模块&插件zgbuynow 发起了问题 • 1 人关注 • 0 个回复 • 816 次浏览 • 2020-05-27 18:21 • 来自相关话题

百度地图不可用

回复

BUG反馈7739小海 发起了问题 • 1 人关注 • 0 个回复 • 677 次浏览 • 2020-05-26 13:15 • 来自相关话题

上传图片undefined

回复

BUG反馈7739小海 发起了问题 • 1 人关注 • 0 个回复 • 746 次浏览 • 2020-05-26 11:08 • 来自相关话题

where 条件查询 输出sql语句能在数据库查询数据,但是在框架里就查询不出数据

回复

提问交流a673435628 发起了问题 • 1 人关注 • 0 个回复 • 850 次浏览 • 2020-05-25 17:24 • 来自相关话题

setSearch没有默认值

回复

功能建议barry 发起了问题 • 1 人关注 • 0 个回复 • 720 次浏览 • 2020-05-22 11:34 • 来自相关话题

请问数据库取出的列怎么对应到复选框中?

回复

经验分享zzyu220 发起了问题 • 1 人关注 • 0 个回复 • 703 次浏览 • 2020-05-18 11:14 • 来自相关话题

会更新 Thinkphp6 吗?

框架发布小兔言言 回复了问题 • 4 人关注 • 3 个回复 • 2280 次浏览 • 2020-05-14 14:52 • 来自相关话题

addRightButton自定义按钮上是标题

回复

提问交流barry 发起了问题 • 1 人关注 • 0 个回复 • 703 次浏览 • 2020-05-14 10:38 • 来自相关话题

使用七牛云插件上传图片提示“服务器错误”

BUG反馈zak 回复了问题 • 3 人关注 • 2 个回复 • 982 次浏览 • 2020-05-12 09:49 • 来自相关话题

海豚php经常出现系统异常,cpu或者内存经常跑满,隔几天一次

BUG反馈mrcai 回复了问题 • 3 人关注 • 3 个回复 • 1332 次浏览 • 2020-05-09 12:30 • 来自相关话题

excel导出问题

提问交流mrcai 回复了问题 • 2 人关注 • 2 个回复 • 702 次浏览 • 2020-05-09 12:26 • 来自相关话题

Excel导入导出插件导入4万条数据报错

提问交流mrcai 回复了问题 • 2 人关注 • 1 个回复 • 761 次浏览 • 2020-05-09 12:21 • 来自相关话题

苹果手机端上传图片问题

回复

提问交流panpan 发起了问题 • 1 人关注 • 0 个回复 • 717 次浏览 • 2020-05-06 13:07 • 来自相关话题

addFilter 中使用了cache方法,缓存名称有问题

回复

BUG反馈devilmengcry 发起了问题 • 1 人关注 • 0 个回复 • 780 次浏览 • 2020-04-22 17:35 • 来自相关话题

出现报错提示 查询表达式错误

回复

提问交流panpan 发起了问题 • 0 人关注 • 0 个回复 • 831 次浏览 • 2020-04-17 10:33 • 来自相关话题

cms 内容模型 添加字段的时候显示 服务器内部错误

BUG反馈surge 回复了问题 • 2 人关注 • 3 个回复 • 1322 次浏览 • 2020-04-16 20:26 • 来自相关话题

导航菜单:获取不到当前节点地址,可能未添加节点

回复

提问交流tec2000 回复了问题 • 1 人关注 • 1 个回复 • 1112 次浏览 • 2020-04-12 09:45 • 来自相关话题

需要一个函数,保存远程图片到本地

功能建议yangweijie 回复了问题 • 2 人关注 • 2 个回复 • 921 次浏览 • 2020-04-07 09:21 • 来自相关话题

自制tp6版海豚完成

模块&插件yangweijie 发表了文章 • 11 个评论 • 1147 次浏览 • 2020-04-07 09:13 • 来自相关话题

克隆 大家去github clone yangweijie/one_admin 
 
或者下载 yangweijie/one_admin/releases/tag/v1.0
因为官方一直没有出tp6版的,所以最近闲的时候学习tp6,做了一下移植。
帮助官方踩一下坑,希望官方能参考dev.md 看看变化
 
db model 助手函数都取消了,上传也不一样了。
 
喜欢的人可以尝鲜,顺便修修bug。官方内置模块、数据包 都测过了,钩子换成了事件。官方的插件也正常运行。
 
后面有空会把自己的博客升级这个版本,一些常见的扩展模块也会移植。 查看全部
克隆 大家去github clone yangweijie/one_admin 
 
或者下载 yangweijie/one_admin/releases/tag/v1.0
因为官方一直没有出tp6版的,所以最近闲的时候学习tp6,做了一下移植。
帮助官方踩一下坑,希望官方能参考dev.md 看看变化
 
db model 助手函数都取消了,上传也不一样了。
 
喜欢的人可以尝鲜,顺便修修bug。官方内置模块、数据包 都测过了,钩子换成了事件。官方的插件也正常运行。
 
后面有空会把自己的博客升级这个版本,一些常见的扩展模块也会移植。