TP中的文件上传:(底层使用了\think\File类)
思路:
①修改form表单:文件上传域及name值,form标签的enctype属性="multipart/form-data"
②在控制器对文件进行处理,将文件保存在指定目录,将文件保存路径存到数据表
html
<div class="well">
<div>[<a href="javascript:void(0);" class="add">+</a>]商品图片:<input type="file" name="goods_pics[]" value="" class="input-xlarge"></div>
</div>
<script type="text/javascript">
$(function(){
$('.add').click(function(){
var add_div = '<div>[<a href="javascript:void(0);" class="sub">-</a>]商品图片:<input type="file" name="goods_pics[]" value="" class="input-xlarge"></div>';
$(this).parent().after(add_div);
});
});
</script>
②修改Goods控制器save方法,处理文件上传
public function save(Request $request)
{
//接收参数
$params = input();
// 定义验证规则
$rule = [
'goods_name|商品名称' => 'require|token',
'goods_price|商品价格' => 'require|float|egt:0',
'goods_number|商品数量' => 'require|integer|egt:0'
];
//定义错误提示信息(可选)
$msg = [
'goods_price.float' => '商品价格必须是整数或者小数'
];
//调用控制器的validate方法
$validate = $this->validate($params, $rule, $msg);
if($validate !== true){
//验证失败, $validate 就是一个字符串错误信息
$this->error($validate);
}
//文件上传
$params['goods_logo'] = $this->upload_logo();
//添加数据到数据表 第二个参数true表示过滤非数据表字段
\app\admin\model\Goods::create($params, true);
//页面跳转
$this->success('操作成功', 'admin/goods/index');
//$this->error('操作失败');
//$this->redirect( 'admin/goods/index');
}
private function upload_logo()
{
//获取上传的文件
$file = request()->file('logo');
//判断 是否上传了文件
if(empty($file)){
$this->error('没有上传文件');
}
//移动图片到指定的目录下 /public/uploads/
$info = $file->validate(['size' => 100*1024*1024, 'ext' => 'jpg,png,gif,jpeg'])->move(ROOT_PATH . 'public' . DS . 'uploads');
if($info){
//上传成功 拼接图片的访问路径 /uploads/20190709/fssdsahfdskasa.jpg
$goods_logo = DS . 'uploads' . DS .$info->getSaveName();
//生成缩略图 \think\Image类 保存
//打开图片
$image = \think\Image::open('.' . $goods_logo);
// 生成缩略图 保存图片
$image->thumb(300, 250)->save('.' . $goods_logo);
//返回图片路径
return $goods_logo;
}else{
//上传失败
$error_msg = $file->getError();
$this->error($error_msg);
}
}
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。