### 圖片上傳(插件)
<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.公有上傳

~~~
{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處理