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 相关文章推荐
给php新手谈谈我的学习心得
Feb 25 PHP
php合并数组array_merge函数运算符加号与的区别
Oct 31 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
Mar 05 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
php生成0~1随机小数的方法(必看)
Apr 05 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
微信企业转账之入口类分装php代码
Oct 01 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
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
拖拉表格的JS函数
2008/11/20 Javascript
jQuery 解析xml文件
2009/08/09 Javascript
JS编程小常识很有用
2012/11/26 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
JavaScript调用客户端的可执行文件(示例代码)
2013/11/28 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
2014/11/23 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
2015/06/18 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
JS作用域链详解
2017/06/26 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
Python字符串替换实例分析
2015/05/11 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
python selenium操作cookie的实现
2020/03/18 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
为什么相对PHP黑python的更少
2020/06/21 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
html5 canvas 使用示例
2010/10/22 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
电子信息工程自荐信
2014/05/26 职场文书
机关工会工作总结2015
2015/05/26 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang