yii2组件之多图上传插件FileInput的详细使用
作者:白狼 出处:http://www.manks.top/yii2_multiply_images.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
文件上传也写过几篇文章了,包括最基本的yii2文件上传、异步上传到又拍云以及百度编辑器图片上传的问题,貌似不说点多图上传的就不完美。
今天介绍一款多图上传的插件 FileInput,至于为什么选中了TA作为我们上传的插件,一来这货跟Yii2有一腿,用起来方便;二来嘛,用这个插件不仅添加的时候好操作,修改的时候也可以直接通过异步的方式将图片悄无声息的删掉;最值得一提的是,界面效果融合了bootstrap,清爽简洁美观,看起来舒服。
借助一下场景,方便说明
假设我们有一张商品表,一张商品图片表,商品图片表只对商品id和图片地址进行存储
开始前准备工作
1、下载我们所需要的组件
- composer require kartik-v/yii2-widget-fileinput "@dev"
2、准备一张商品表和一张商品图片表,商品图片表包括商品id和图片url即可
同步上传多图片操作
我们这里所谓的同步操作,即在添加商品时选择多张图片,然后跟随表单一同提交。来看看怎么使用的。
- use kartik\file\FileInput;
- // 非ActiveForm的表单
- echo '<label class="control-label">图片</label>';
- echo FileInput::widget([
- 'model' => $model,
- 'attribute' => 'banner[]',
- 'options' => ['multiple' => true]
- ]);
- //使用ActiveForm的表单
- echo $form->field($model, 'banner[]')->widget(FileInput::classname(), [
- 'options' => ['multiple' => true],
- ]);
若是要上传多图,记得选择图片的时候多选哦。
如此一来,图片选择好了直接提交表单就好,后端文件上传的程序需要自行处理,如果你还没有实现,可以参考文件上传的基本操作。需要提醒的是,以本文为例,此处我们给商品添加多图片实际是操作了两张数据表。
商品图的异步修改(包括删除\添加)操作
开篇可以看到,对于商品的banner图,我们是跟随表单一同提交而进行的上传,接着我们说一说这个麻烦事:编辑商品的时候如何展示商品图以及如何对商品图进行更新\新增\删除的操作?
首先,我们在controller中获取商品对应的banner图,在编辑商品页面展现banner图之前,我们对其稍微进行一下处理:
- // 假设商品的banner图是 $relationBanners的集合, $id是商品的id
- // $relationBanners的数据结构如:
- /**
- * Array
- *(
- * [0] => Array
- * (
- * [id] => 1484314
- * [goods_id] => 1173376
- * [banner] => ./uploads/20160617/146612713857635322241f2.png
- * )
- *
- *)
- */
- $relationBanners = Banner::find()->where(['goods_id' => $id])->asArray()->all();
- // @param $p1 Array 需要预览的商品图,是商品图的一个集合
- // @param $p2 Array 对应商品图的操作属性,我们这里包括商品图删除的地址和商品图的id
- $p1 = $p2 = [];
- if ($relationBanners) {
- foreach ($relationBanners as $k => $v) {
- $p1[$k] = $v['banner'];
- $p2[$k] = [
- // 要删除商品图的地址
- 'url' => Url::toRoute('/banner/delete'),
- // 商品图对应的商品图id
- 'key' => $v['id'],
- ];
- }
- }
- return $this->render('banner', [
- // other params
- 'p1' => $p1,
- 'p2' => $p2,
- // 商品id
- 'id' => $id,
- ]);
视图文件View的代码可参考
- // 视图文件
- use kartik\file\FileInput;
- <?php
- echo $form->field($model, 'banner[]')->label('banner图')->widget(FileInput::classname(), [
- 'options' => ['multiple' => true],
- 'pluginOptions' => [
- // 需要预览的文件格式
- 'previewFileType' => 'image',
- // 预览的文件
- 'initialPreview' => $p1,
- // 需要展示的图片设置,比如图片的宽度等
- 'initialPreviewConfig' => $p2,
- // 是否展示预览图
- 'initialPreviewAsData' => true,
- // 异步上传的接口地址设置
- 'uploadUrl' => Url::toRoute(['/goods/async-banner']),
- // 异步上传需要携带的其他参数,比如商品id等
- 'uploadExtraData' => [
- 'goods_id' => $id,
- ],
- 'uploadAsync' => true,
- // 最少上传的文件个数限制
- 'minFileCount' => 1,
- // 最多上传的文件个数限制
- 'maxFileCount' => 10,
- // 是否显示移除按钮,指input上面的移除按钮,非具体图片上的移除按钮
- 'showRemove' => true,
- // 是否显示上传按钮,指input上面的上传按钮,非具体图片上的上传按钮
- 'showUpload' => true,
- //是否显示[选择]按钮,指input上面的[选择]按钮,非具体图片上的上传按钮
- 'showBrowse' => true,
- // 展示图片区域是否可点击选择多文件
- 'browseOnZoneClick' => true,
- // 如果要设置具体图片上的移除、上传和展示按钮,需要设置该选项
- 'fileActionSettings' => [
- // 设置具体图片的查看属性为false,默认为true
- 'showZoom' => false,
- // 设置具体图片的上传属性为true,默认为true
- 'showUpload' => true,
- // 设置具体图片的移除属性为true,默认为true
- 'showRemove' => true,
- ],
- ],
- // 一些事件行为
- 'pluginEvents' => [
- // 上传成功后的回调方法,需要的可查看data后再做具体操作,一般不需要设置
- "fileuploaded" => "function (event, data, id, index) {
- console.log(data);
- }",
- ],
- ]);
- ?>
如上所述,我们罗列了一些都是组件 FileInput的基本属性和设置,如有所需,可查看文档看属性的详细说明。
[考虑目前国内网站大部分采集文章十分频繁,更有甚者不注明原文出处,原作者更希望看客们查看原文,以防有任何问题不能更新所有文章,避免误导!]
yii2组件之多图上传插件FileInput的详细使用的更多相关文章
- Vue的移动端多图上传插件vue-easy-uploader
原文地址 前言 这段时间赶项目,需要用到多文件上传,用Vue进行前端项目开发.在网上找了不少插件,都不是十分满意,有的使用起来繁琐,有的不能适应本项目.就打算自己折腾一下,写一个Vue的上传插件,一劳 ...
- Bootstrap FileInput 多图上传插件 文档属性说明
Bootstrap FileInput 多图上传插件 原文链接:http://blog.csdn.net/misterwho/article/details/72886248?utm_source ...
- 基于bootstrap的上传插件fileinput实现ajax异步上传功能(支持多文件上传预览拖拽)
首先需要导入一些js和css文件 ? 1 2 3 4 5 6 <link href="__PUBLIC__/CSS/bootstrap.css" rel="exte ...
- Bootstrap 文件上传插件 FileInput的使用问题
: 在使用bootstrap的文件上传插件fileinput http://plugins.krajee.com/file-input的预览功能时,删除预览图片在 bootstrap 模态框中没有用, ...
- 单独调用kindeditor的多图上传组件实现多图上传
本例是单独调用kindeditor多图上传的组件来进行多图上传,兼容性你懂得! 官方示例地址:http://kindeditor.net/ke4/examples/multi-image-dialog ...
- bootsrap 上传插件fileinput 简单使用
1.安装 下载fileinput文件,载入对应的css+js文件,如下: <link href="css/bootstrap.min.css" rel="style ...
- swfupload多图上传插件(ASP.NET)
<script src="../js/swfupload/swfupload.js" type="text/javascript"></scr ...
- 支持多文件上传,预览,拖拽,基于bootstra的上传插件fileinput 的ajax异步上传
首先需要导入一些js和css文件 <link href="__PUBLIC__/CSS/bootstrap.css" rel="stylesheet"&g ...
- 支持多文件上传,预览,拖拽,基于bootstrap的上传插件fileinput 的ajax异步上传(转载)
首先需要导入一些js和css文件 <link href="__PUBLIC__/CSS/bootstrap.css" rel="stylesheet"&g ...
随机推荐
- 基于Caffe的Large Margin Softmax Loss的实现(上)
小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...
- GC使用注意
GC.Collect() GC.WaitForPendingFinallizers() GC.KeepAlive 尽量不要new很大的Object 不要频繁的new生命周期很短的Object,这样会导 ...
- 前端学HTTP之网络基础
× 目录 [1]网络 [2]OSI [3]TCP/IP 前面的话 HTTP协议对于前端工程师是非常重要的.我们在浏览网站时,访问的每一个WEB页面都需要使用HTTP协议实现.如果不了解HTTP协议,就 ...
- Android消息传递之组件间传递消息
前言: 上篇学习总结了Android通过Handler消息机制实现了工作线程与UI线程之间的通信,今天来学习一下如何实现组件之间的通信.本文依然是为学习EventBus做铺垫,有对比才能进步,今天主要 ...
- 用枚举enum替代int常量
枚举的好处: 1. 类型安全性 2.使用方便性 public class EnumDemo { enum Color{ RED(3),BLUE(5),BLACK(8),YELLOW(13),GREEN ...
- DotLiquid模板引擎简介
DotLiquid是一个在.Net Framework上运行的模板引擎,采用Ruby的Liquid语法,这个语法广泛的用在Ruby on rails和Django等网页框架中. DotLiquid相比 ...
- 深入浅出数据仓库中SQL性能优化之Hive篇
转自:http://www.csdn.net/article/2015-01-13/2823530 一个Hive查询生成多个Map Reduce Job,一个Map Reduce Job又有Map,R ...
- java设计模式之简单工厂模式
简单工厂: 简单工厂的优点: 1.去除客户端与具体产品的耦合,在客户端与具体的产品中增加一个工厂类,增加客户端与工厂类的耦合 2.封装工厂类,实现代码平台的复用性,创建对象的过程被封装成工厂类,可以多 ...
- 分享:使用 TypeScript 编写的 JavaScript 游戏代码
<上篇博客>我写出了我一直期望的 JavaScript 大型程序的开发模式,以及 TS(TypeScript) 的一些优势.博客完成之后,我又花了一天时间试用 TS,用它来重构之前编写的一 ...
- java获取https网站证书,附带调用https:webservice接口
一.java 获取https网站证书: 1.创建一个java工程,新建InstallCert类,将以下代码复制进去 package com; import java.io.BufferedReader ...