### 图片上传(插件)
<blockquote class="danger"><p>插件上传图片的话是先将图片上传上去, 返回一个参数值, 这样就打成了无刷新预览的目的.唯一的缺点就是上传之后, 他再次上传或者持续上传的话, 不会写入数据库, 就变成了冗余图片. 需要其他机制处理. </p></blockquote>
* 图片上传采用layer+php上传.
* 没有新建页面, 直接在三级分销-积分处理里面加上这句即可上传.
* 函数为integral, 函数写在application/admin/model/Index.php
* addIntegral方法
~~~
->addFormItem('picture_id', '上传头像','上传头像.','picture','','required')
~~~
* 路径application/admin/model/Index.php
* 此处采用layer上传, 简单的写了下回调. 觉得这个组件回调不是很好看.虽然解决了问题.
* 上传访问路径, admin下的File下的upload.公有上传
![](https://box.kancloud.cn/d0885a384bd393426f1d253d45a13361_451x175.png)
~~~
{case value="picture"}
{php}
$webuploader=1;
if (strpos($field['name'],'[')) {
$field['id'] = str_replace(']','',str_replace('[','',$field['name']));
}else{
$field['id'] = $field['name'];
}
{/php}
<div class="layui-form-item item_{$field.name} {$field.extra_class}">
<label class="layui-form-label">{$field.title}</label>
<div class="">
<input type="file" name="file" class="layui-upload-file " style=" float:left;" id="picture_{$field.name}">
<img src="" width="150px;" height="150px;" id="img_{$field.id}" style="display:none; float:left;">
<input class="attach" type="hidden" id="{$field.id}" name="{$field.name}" value=""/>
</div>
</div>
<script>
layui.use('upload', function(){
layui.upload({
elem:"#picture_{$field.name}" ,
url: "{:url('admin/File/upload',['uploadtype'=>'picture','setpath'=>'product'])}" //上传接口
,success: function(res){ //上传成功后的回调
$("#img_{$field.id}").css('display','block');
$("#img_{$field.id}").attr('src',res['info']['url']);
$("#{$field.id}").attr("value",res['info']['url']);
}
});
});
</script>
{/case}
~~~
* 在配置文件里面配置三种上传的路径, 也就是不同的上传
* 附件上传用于传附件的.
* picture用于上传图片的.
* avatar_upload用于上传头像的.
* 这样就可以通过不同的上传进行判断. js判断也好.后端判断也好. 此处只做了picture_upload其他上传自行扩展.
* 路径application/config.php
~~~
// +----------------------------------------------------------------------
// | 附件上传
// +----------------------------------------------------------------------
'file_upload' => array(
// 允许上传的文件MiMe类型
'mimes' => [],
// 上传的文件大小限制 (0-不做限制)
'maxSize' => 2*1024*1024,
// 允许上传的文件后缀
'exts' => ['xlsx,xls'],
// 子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
'subName' => ['date', 'Y-m-d'],
//保存根路径
'rootPath' => './public/uploads/attachment',
// 保存路径
'savePath' => '',
// 上传文件命名规则,date,md5,sha1,自定义规则
'saveName' => 'uniqid',
// 文件上传驱动e,
'driver' => 'local',
),
'picture_upload' => array(
// 允许上传的文件MiMe类型
'mimes' => [],
// 上传的文件大小限制
'maxSize' => 2*1024*1024,
// 允许上传的文件后缀
'exts' => 'gif,jpg,jpeg,bmp,png',
// 子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
'subName' => ['date', 'Y-m-d'],
//保存根路径
'rootPath' => './public/uploads/picture',
// 保存路径
'savePath' => '',
// 上传文件命名规则,date,md5,sha1,自定义规则
'saveName' => 'uniqid',
// 文件上传驱动e,
'driver' => 'local',
),
'avatar_upload' => array(
// 允许上传的文件MiMe类型
'mimes' => [],
// 上传的文件大小限制
'maxSize' => 2*1024*1024,
// 允许上传的文件后缀
'exts' => 'gif,jpg,jpeg,bmp,png',
// 子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
'subName' => ['date', 'Y-m-d'],
//保存根路径
'rootPath' => './public/uploads/avatar',
// 保存路径
'savePath' => '',
// 上传文件命名规则,date,md5,sha1,自定义规则
'saveName' => 'uniqid',
// 文件上传驱动e,
'driver' => 'local',
),
~~~
* 文件控制器
* 这个为公有文件控制器, 用于所有单个上传处理.
* 路径application/admin/controller/File.php
~~~
namespace app\admin\controller;
use app\admin\controller\Base;
use app\admin\controller\Upload as UploadController;
use think\Loader;
use think\Config;
class File extends Base
{
function _initialize()
{
parent::_initialize();
// p($this->member_model);
// exit;
}
/**
* 上传
* @return [type] [description]
*/
public function upload()
{
$uploadtype = $this->param['uploadtype'];
$setpath = $this->param['setpath'];
$controller = new UploadController;
$return = $controller->upload($uploadtype,$setpath);
return json($return);
}
/**
*[uploadAvatar] 上传图像操作
* @return [type] [description]
*/
public function uploadAvatar($uuid=0)
{
$return = [
'status' =>1,
'path' =>'/public/images/defalut.jpg',
'msg' =>'提示成功'
];
return json($return);
}
}
~~~
* 上传控制器, 在此处上传完成之后将值回调回去.
* 此处作为公有, 无论有怎么样的单图上传即可在此处理.
* 路径application/admin/controller/Upload.php
~~~
namespace app\admin\controller;
use think\Request;
class Upload {
protected $request;
/**
* 架构函数
* @param Request $request Request对象
* @access public
*/
public function __construct()
{
$this->request = Request::instance();
$this->file_model = new File();
}
/**
* 上传控制器
*/
public function upload($uploadtype,$setpath) {
$upload_type = $uploadtype;
$setpath = $setpath;
$config = config($upload_type.'_upload');
$rootPath = $setpath!='picture' && $setpath ? './public/uploads/'.$setpath : $config['rootPath'];
$upload_path = $rootPath.'/'.call_user_func_array($config['subName'][0],[$config['subName'][1],time()]);
$file = $this->request->file('file');
$info = $file->validate(['size'=>$config['maxSize'],'ext'=>$config['exts'][0]])->rule($config['saveName'])->move($upload_path, true, false);
if ($info) {
$upload_info = $this->parseFile($info);
$save_upload_name = $upload_info['path'];
//oss_uploadFile($save_upload_name);//存储到静态资源服务器
$return['status'] = 1;
$return['info'] = $upload_info;
} else {
$return['status'] = 0;
$return['info'] = $file->getError();
}
return $return;
}
/**
* 上传用户头像
* @param integer $uid [description]
* @return [type] [description]
*/
public function uploadAvatar($uid=0)
{
if (!$uid) return false;
$config = config('avatar_upload');
$upload_path = $config['rootPath'].'/'.$uid;
// 获取表单上传文件 例如上传了001.jpg
$file = $this->request->file('file');
$info = $file->validate(['size'=>$config['maxSize'],'ext'=>$config['exts']])->rule($config['saveName'])->move($upload_path, true, false);
if ($info) {
$return['status'] = 1;
$return['info'] = $info;
} else {
$return['status'] = 0;
$return['info'] = $file->getError();
}
return $return;
}
/**
* 保存上传的信息到数据库
* @var view
* @access public
*/
public function save($config, $from_file_name, $file) {
$file = $this->parseFile($file);
$file['member_id'] = is_login();
$file['location'] = $config['driver'];
$file['status'] = 1;
$info=$this->file_model->get(['md5'=>$file['md5'],'sha1'=>$file['sha1']]);
if ($info) {
$info = $info->toArray();
$info['msg']='文件已存在';
return $info;
} else {
$this->file_model->allowField(true)->data($file)->save();
$id = $this->file_model->id;
if ($id>0) {
$data = $this->file_model->get($id);
return $data;
} else {
return false;
}
}
}
protected function parseFile($info) {
$data['create_time'] = $info->getATime();
$data['basename'] = $info->getBasename();
//$data['c_time'] = $info->getCTime();
$data['ext'] = $info->getExtension();
$data['name'] = $info->getFilename();
$data['mime_type'] = strstr($info->getMime(),'/',true);
$data['savepath'] = $info->getPath();
$data['path'] = str_replace("\\", '/', substr($info->getPathname(), 1));
$data['url'] = config('oss_alias_url').$data['path'];
$data['size'] = $info->getSize();
$data['md5'] = md5_file($info->getPathname());
$data['sha1'] = sha1_file($info->getPathname());
return $data;
}
}
~~~
- 序言
- 简介
- 数据库
- 注册/登录
- controller
- model
- validate
- view
- config.php
- config配置
- builder
- builder-表单页
- builder-列表页
- 三级分销
- 分销注册
- 分销处理
- 图片上传(内置)
- 图片上传(插件)
- 多图上传(插件)
- 编辑器上传图片(路径/oss等)
- Excel导入/导出
- Excel-导出
- Excel-导入
- 商城规格/属性
- 类型处理
- 商城规格(Spec)
- 商城规格-表设计
- 商城规格处理
- 商城属性(Attribute)
- 商城属性-表设计
- 商品属性处理
- 分类管理(type)
- 分类设计-表设计
- 分类内容处理
- 商品列表
- 商品列表-表设计
- 商品内容处理
- 商品view处理