laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子


Posted in PHP onNovember 14, 2019

首先先看下效果图

这是添加的时候 可以上传照片

laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子

这是编辑的时候 可以修改照片

laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子

代码部分:

先看控制器:

/***
   * 添加商户
   * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
   */
  public function add()
  {
 
    $data = null;
    return _view('admin.merchant.merchant.edit', compact('data'));
  }
 
  /***
   * 添加商户
   * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
   */
  public function store(StoreMenchantRequest $request)
  {
    //判断手机号是否重复 重复不能添加
    //后面开发可能会去掉这个判断
    $merchant = Merchant::where('mobile', $request->mobile)->first();
    if (!empty($merchant)) {
      return back()->withErrors('该用户已存在');
    }
    $token = str_random(60);
    $api_token = $this->getToken($token);
    $newMerchantData = [
      'mobile' => $request->mobile,
      'api_token' => $api_token,
    ];
    DB::beginTransaction();
    $newMerchant = Merchant::create($newMerchantData);
    $newData = [
      'merchant_id' => $newMerchant->id,//Merchantid
      'merchant_principal' => $request->merchant_principal,//负责人
      'merchant_name' => $request->merchant_name,//商家名称
      'merchant_short_name' => $request->merchant_short_name,//商家简称
      'merchant_address' => $request->merchant_address,//商家地址
      'business_num' => $request->business_num,//注册号
      'business_address' => $request->business_address,//营业地址
      'business_name' => $request->business_name,//营业执照名称
      'business_person' => $request->person,//营业执照法人
      'identity_name' => $request->person,//身份证姓名
      'identity_num' => $request->identity_num,//身份证号
    ];
    //上传缩略图
    $input = $request->all();
    if (isset($input['file']) && is_object($input['file'])) {
 
      $file_name = save_image_file($input['file'], 'merchant_infos');
      if (!$file_name) {
        return back()->with('msg', '图片上传失败,请重试!');
      }
//      dd($file_name);
      $input['thumbnail'] = $file_name;
      unset($input['_token']);
      unset($input['file']);
    } else {
      return back()->with('msg', '请上传图片');
    }
    //上传内景图1
    if (isset($input['image1']) && is_object($input['image1'])) {
 
      $file_name_1 = save_image_file($input['image1'], 'merchant_infos');
      if (!$file_name_1) {
        return back()->with('msg', '图片上传失败,请重试!');
      }
 
      $input['interior_figure_one'] = $file_name_1;
      unset($input['_token']);
      unset($input['image1']);
    } else {
      return back()->with('msg', '请上传图片');
    }
    //上传内景图2
    if (isset($input['image2']) && is_object($input['image2'])) {
 
      $file_name_2 = save_image_file($input['image2'], 'merchant_infos');
      if (!$file_name_2) {
        return back()->with('msg', '图片上传失败,请重试!');
      }
      $input['interior_figure_two'] = $file_name_2;
      unset($input['_token']);
      unset($input['image2']);
    } else {
      return back()->with('msg', '请上传图片');
    }
    //上传内景图3
    if (isset($input['image3']) && is_object($input['image3'])) {
 
      $file_name_3 = save_image_file($input['image3'], 'merchant_infos');
      if (!$file_name_3) {
        return back()->with('msg', '图片上传失败,请重试!');
      }
      $input['interior_figure_three'] = $file_name_3;
      unset($input['_token']);
      unset($input['image3']);
    } else {
      return back()->with('msg', '请上传图片');
    }
 
    $merchantInfo = MerchantInfo::where('merchant_id', $newMerchant->id)->first();
    if (!empty($merchantInfo)) {
      return back()->withErrors('该用户已录入信息');
    }
    $homestayInfo = HomestayInfo::where('merchant_id', $newMerchant->id)->first();
    if (!empty($homestayInfo)) {
      return back()->withErrors('该用户已录入信息');
    }
    //录入商户信息
    $newData['thumbnail'] = $input['thumbnail'];
    $newData['interior_figure_one'] = $input['interior_figure_one'];
    $newData['interior_figure_two'] = $input['interior_figure_two'];
    $newData['interior_figure_three'] = $input['interior_figure_three'];
    $newData['content'] = $input['content'];
    $newMerchantInfo = MerchantInfo::create($newData);
    $newHomestayInfo = HomestayInfo::create($newData);
    if ($newMerchantInfo && $newHomestayInfo && $newMerchant) {
      DB::commit();
      admin_action_logs($newMerchant, "添加商户成功");
      return redirect()->route('admin.merchant.index')->with('msg', '添加成功');
    } else {
      DB::rollback();
      return back()->withErrors('添加失败,请联系管理员');
    }
 
 
  }

这边封装了一个上传图片的方法,调用即可

**
 * 调用的文件中需要 use Illuminate\Support\Facades\Input; Illuminate\Support\Facades\Storage;
 * save_image_file 保存图片文件 ,存在Storage::disk('uploads') 目录下
 * @var $file object 上传的图片文件,具体是在 request 中的 UploadedFile 类型的对象
 * @var $prefix_name string 可选保存的文件名前缀
 * @var $path string 文件路径
 * @return bool/string 如果通过验证 则返回在新的文件名
 */
if (!function_exists('save_image_file')) {
 
  function save_image_file(&$file, $prefix_name = '', $path = 'serve')
  {
    $file = isset($file) ? $file : null;
    if ($file != null && $file->isValid()) {
      // 获取文件相关信息
      $originalName = $file->getClientOriginalName(); // 文件原名
      $ext = $file->getClientOriginalExtension();   // 扩展名
      //dd($ext);
      $file->getClientOriginalName();
 
      if ($ext == "" && $file->getClientOriginalName() == 'blob') {
        $ext = 'png';
      }
      if (!preg_match('/jpg|png|gif$/is', $ext)) {
        return false;
      }
      //dd($file->getRealPath());
      $realPath = $file->getRealPath();  //临时文件的绝对路径
      $type = $file->getClientMimeType();   // image/jpeg
      // 上传文件
      $filename = $prefix_name . '-' . date('Y-m-d-H-i-s') . '-' . uniqid() . '.' . $ext;
      //dd($filename);
      $bool = Storage::disk($path)->put($filename, file_get_contents($realPath));
      if (!$bool) return false;
      return $filename;
    }
    return false;
  }
}

接下来是编辑时候 显示已经上传的图片 并且可以进行修改:

<div class="row">
  <div class="col-lg-6 col-sm-8 col-xs-12">
    <div class="panel panel-default">
      {{ Form::open(['method'=>'post','route' => ['admin.merchant.add_img_store'],'enctype'=>'multipart/form-data']) }}
      <div class="panel-heading">商户图片</div>
      <div class="panel-body">
        <input type="hidden" name="id" value="{{$data->id}}">
        <div class=" form-group">
          <?php $hasUrl = old_or_new_field('thumbnail', $data); ?>
          <div class="form-group {{!$hasUrl or 'has-error'}} has-feedback">
            <label class="control-label" for="file">
              <span class="font-red">*</span>
              <span>缩略图:</span>
              <span class="font-gray">(宽高为120px:120px):</span>
            </label>
            <div class="input-group">
              @if( $hasUrl )
                <input type="file" class="file-preview form-control" name="file" id="file" accept="image/*"
                    value="{{ old_or_new_field('thumbnail',$data) }}">
              @else
                <input type="file" class="file-preview form-control validate" name="file" required id="file"
                    accept="image/*"
                    value="{{ old_or_new_field('thumbnail',$data) }}">
              @endif
            </div>
          </div>
          <div class="file-preview-wrap">
            <img
                @if( old_or_new_field('thumbnail',$data) )
                src="{{asset('storage/serve').'/'.old_or_new_field('thumbnail',$data)}}" data-src="{{ asset('storage/serve'.old_or_new_img('thumbnail', $data, false))}}"
                @else
 
                src="{{asset('storage/serve').'/'. (isset($data->merchantInfo->thumbnail)?$data->merchantInfo->thumbnail:' ')}}" data-src="{{ asset('storage/serve').'/'. (isset($data->merchantInfo->thumbnail)?$data->merchantInfo->thumbnail:' ')}}"
                @endif
                id="file-preview" class="img-thumbnail" alt="图片预览" data-magnify="gallery">
 
          </div>
        </div>
        <div>
          <?php $hasUrl = old_or_new_field('interior_figure_one', $data); ?>
          <div class="form-group {{!$hasUrl or 'has-error'}} has-feedback">
            <label class="control-label" for="file">
              <span class="font-red">*</span>
              <span>内景图1:</span>
              <span class="font-gray">(宽高为375px:200px):</span>
            </label>
            <div class="input-group">
              @if( $hasUrl )
                <input type="file" class="file-preview-second form-control" name="image1" id="image1" accept="image/*"
                    value="{{ old_or_new_field('interior_figure_one',$data) }}">
              @else
                <input type="file" class="file-preview-second form-control validate" name="image1" required id="image1"
                    accept="image/*"
                    value="{{ old_or_new_field('interior_figure_one',$data) }}">
              @endif
            </div>
          </div>
          <div class="file-preview-wrap">
            <img
                @if( old_or_new_field('interior_figure_one',$data) )
                src="{{asset('storage/serve').'/'.old_or_new_field('interior_figure_one',$data)}}" data-src="{{ asset('storage/serve'.old_or_new_img('interior_figure_one', $data, false))}}"
                @else
                src="{{asset('storage/serve').'/'.(isset($data->merchantInfo->interior_figure_one)?$data->merchantInfo->interior_figure_one:'')}}" data-src="{{ asset('storage/serve').'/'.(isset($data->merchantInfo->interior_figure_one)?$data->merchantInfo->interior_figure_one:'')}}"
 
                @endif
                width="375px" height="200px" id="file-preview-second" class="img-thumbnail" alt="图片预览" data-magnify="gallery">
          </div>
        </div>
        <div >
          <?php $hasUrl = old_or_new_field('interior_figure_two', $data); ?>
          <div class="form-group {{!$hasUrl or 'has-error'}} has-feedback">
            <label class="control-label" for="file">
              <span class="font-red">*</span>
              <span>内景图2:</span>
              <span class="font-gray">(宽高为375px:200px):</span>
            </label>
            <div class="input-group">
              @if( $hasUrl )
                <input type="file" class="file-preview-third form-control" name="image2" id="image2" accept="image/*"
                    value="{{ old_or_new_field('interior_figure_two',$data) }}">
              @else
                <input type="file" class="file-preview-third form-control validate" name="image2" required id="image2"
                    accept="image/*"
                    value="{{ old_or_new_field('interior_figure_two',$data) }}">
              @endif
            </div>
          </div>
          <div class="file-preview-wrap">
            <img
                @if( old_or_new_field('interior_figure_two',$data) )
                {{--src="{{route('Img.uploads.file',[old_or_new_field('url',$data)])}}"--}}
                src="{{asset('storage/serve').'/'.old_or_new_field('interior_figure_two',$data)}}" data-src="{{ asset('storage/serve'.old_or_new_img('interior_figure_two', $data, false))}}"
                @else
                src="{{asset('storage/serve').'/'.(isset($data->merchantInfo->interior_figure_two)?$data->merchantInfo->interior_figure_two:'')}}" data-src="{{ asset('storage/serve').'/'.(isset($data->merchantInfo->interior_figure_two)?$data->merchantInfo->interior_figure_two:'')}}"
                @endif
                width="375px" height="200px" id="file-preview-third" class="img-thumbnail" alt="图片预览" data-magnify="gallery">
          </div>
        </div>
        <div>
          <?php $hasUrl = old_or_new_field('interior_figure_three', $data); ?>
          <div class="form-group {{!$hasUrl or 'has-error'}} has-feedback">
            <label class="control-label" for="file">
              <span class="font-red">*</span>
              <span>缩略图3:</span>
              <span class="font-gray">(宽高为375px:200px):</span>
            </label>
            <div class="input-group">
              @if( $hasUrl )
                <input type="file" class="file-preview-forth form-control" name="image3" id="image3" accept="image/*"
                    value="{{ old_or_new_field('interior_figure_three',$data) }}">
              @else
                <input type="file" class="file-preview-forth form-control validate" name="image3" required id="image3"
                    accept="image/*"
                    value="{{ old_or_new_field('interior_figure_three',$data) }}" >
              @endif
            </div>
          </div>
          <div class="file-preview-wrap">
            <img
                @if( old_or_new_field('interior_figure_three',$data) )
                {{--src="{{route('Img.uploads.file',[old_or_new_field('url',$data)])}}"--}}
                src="{{asset('storage/serve').'/'.old_or_new_field('interior_figure_three',$data)}}" data-src="{{ asset('storage/serve'.old_or_new_img('interior_figure_three', $data, false))}}"
                @else
                src="{{asset('storage/serve').'/'.(isset($data->merchantInfo->interior_figure_three)?$data->merchantInfo->interior_figure_three:'')}}" data-src="{{ asset('storage/serve').'/'.(isset($data->merchantInfo->interior_figure_three)?$data->merchantInfo->interior_figure_three:'')}}"
                @endif
                width="375px" height="200px" id="file-preview-forth" class="img-thumbnail" alt="图片预览" data-magnify="gallery">
          </div>
        </div>
      </div>
 
      <div class="text-center margin-bottom-sm">
        <button class="pretty-btn"> 编辑商户</button>
      </div>
      {{ Form::close() }}
    </div>
  </div>
</div>

编辑这边 的控制器代码是:

/***
 * 添加图片
 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 */
public function add_img()
{
  $data = null;
  return _view('admin.merchant.merchant.add', compact('data'));
}
 
/***
 * 保存图片
 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 */
public function add_img_store(Request $request)
{
  //上传缩略图
  $input = $request->all();
 
  if (isset($input['file']) && is_object($input['file'])) {
 
    $file_name = save_image_file($input['file'], 'merchant_infos');
    if (!$file_name) {
      return back()->with('msg', '图片上传失败,请重试!');
    }
 
    $input['thumbnail'] = $file_name;
    unset($input['_token']);
    unset($input['file']);
  } else {
    return back()->with('msg', '请上传图片');
  }
  //上传内景图1
  if (isset($input['image1']) && is_object($input['image1'])) {
 
    $file_name_1 = save_image_file($input['image1'], 'merchant_infos');
    if (!$file_name_1) {
      return back()->with('msg', '图片上传失败,请重试!');
    }
 
    $input['interior_figure_one'] = $file_name_1;
    unset($input['_token']);
    unset($input['image1']);
  } else {
    return back()->with('msg', '请上传图片');
  }
  //上传内景图2
  if (isset($input['image2']) && is_object($input['image2'])) {
 
    $file_name_2 = save_image_file($input['image2'], 'merchant_infos');
    if (!$file_name_2) {
      return back()->with('msg', '图片上传失败,请重试!');
    }
    $input['interior_figure_two'] = $file_name_2;
    unset($input['_token']);
    unset($input['image2']);
  } else {
    return back()->with('msg', '请上传图片');
  }
  //上传内景图3
  if (isset($input['image3']) && is_object($input['image3'])) {
 
    $file_name_3 = save_image_file($input['image3'], 'merchant_infos');
    if (!$file_name_3) {
      return back()->with('msg', '图片上传失败,请重试!');
    }
    $input['interior_figure_three'] = $file_name_3;
    unset($input['_token']);
    unset($input['image3']);
  } else {
    return back()->with('msg', '请上传图片');
  }
  //录入商户信息
 
  $merchang_info = MerchantInfo::where('merchant_id', '=', $input['id'])->first();
  if (empty($merchang_info)) {
    $newData['thumbnail'] = $input['thumbnail'];
    $newData['merchant_id'] = $input['id'];
    $newData['interior_figure_one'] = $input['interior_figure_one'];
    $newData['interior_figure_two'] = $input['interior_figure_two'];
    $newData['interior_figure_three'] = $input['interior_figure_three'];
    $newData['content']='';
    $result = MerchantInfo::create($newData);
  } /* $newData['thumbnail']=$input['thumbnail'];
  $newData['interior_figure_one']=$input['interior_figure_one'];
  $newData['interior_figure_two']=$input['interior_figure_two'];
  $newData['interior_figure_three']=$input['interior_figure_three'];
  // $newData['content']=$input['content'];
  $newMerchantInfo = MerchantInfo::create($newData);*/
  else {
    $merchang_info->thumbnail = $input['thumbnail']??'';
    $merchang_info->interior_figure_one = $input['interior_figure_one']??'';
    $merchang_info->interior_figure_two = $input['interior_figure_two']??'';
    $merchang_info->interior_figure_three = $input['interior_figure_three']??'';
    $result = $merchang_info->save();
  }
  if ($result) {
    DB::commit();
    admin_action_logs($result, "编辑商户成功");
    return redirect()->route('admin.merchant.index')->with('msg', '编辑成功');
  } else {
    DB::rollback();
    return back()->withErrors('编辑失败,请联系管理员');
  }
}

以上这篇laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Apache设置虚拟WEB
Oct 09 PHP
php 错误处理经验分享
Oct 11 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
Dec 16 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
May 08 PHP
PHP钩子与简单分发方式实例分析
Sep 04 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 PHP
php-fpm中max_children的配置
Mar 15 PHP
PHP http请求超时问题解决方案
Nov 13 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 #PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 #PHP
在 PHP 和 Laravel 中使用 Traits的方法
Nov 13 #PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 #PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 #PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 #PHP
Yii框架学习笔记之应用组件操作示例
Nov 13 #PHP
You might like
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
php实现的双色球算法示例
2017/06/20 PHP
php图片裁剪函数
2018/10/31 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
详解JavaScript树结构
2017/01/09 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
vue接口请求加密实例
2020/08/11 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
若干个Java基础面试题
2015/05/19 面试题
建筑项目策划书
2014/01/13 职场文书
小学安全教育材料
2014/02/17 职场文书
入党自我鉴定
2014/03/25 职场文书
项目建议书
2015/02/04 职场文书
工地材料员岗位职责
2015/04/11 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
Python基础知识学习之类的继承
2021/05/31 Python
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle