Vue + Element UI图片上传控件使用详解


Posted in Javascript onAugust 20, 2019

上一篇 Vue +Element UI +vue-quill-editor 富文本编辑器及插入图片自定义 主要是写了富文本编辑器的自定义及编辑器中图片的上传并插入到编辑内容,这篇文章单独介绍一下element UI 图片上传控件的使用。首先要安装element并中引入,安装引入过程这里不再赘述。

1.引用element 上传控件。

<el-upload
 action="/mgr/common/imgUpload"//这里需要配置一下文件上传地址(跨域)
 list-type="picture-card"
 accept="image/*"
 :limit="imgLimit"
 :file-list="productImgs"
 :multiple="isMultiple"
 :on-preview="handlePictureCardPreview"
 :on-remove="handleRemove"
 :on-success="handleAvatarSuccess"
 :before-upload="beforeAvatarUpload"
 :on-exceed="handleExceed"
 :on-error="imgUploadError">
 <i class="el-icon-plus"></i>
 </el-upload>
 <el-dialog :visible.sync="dialogVisible">
 <img width="100%" :src="dialogImageUrl" alt="">
 </el-dialog>

2.js

export default {
 data() {
 return {
 dialogImageUrl: '',
 dialogVisible: false,
 productImgs: [],
 isMultiple: true,
 imgLimit: 6
 }
 },
 methods: {
 handleRemove(file, fileList) {//移除图片
 console.log(file, fileList);
 },
 handlePictureCardPreview(file) {//预览图片时调用
 console.log(file);
 this.dialogImageUrl = file.url;
 this.dialogVisible = true;
 },
 
 beforeAvatarUpload(file) {//文件上传之前调用做一些拦截限制
 console.log(file);
 const isJPG = true;
 // const isJPG = file.type === 'image/jpeg';
 const isLt2M = file.size / 1024 / 1024 < 2;
 
 // if (!isJPG) {
 // this.$message.error('上传头像图片只能是 JPG 格式!');
 // }
 if (!isLt2M) {
  this.$message.error('上传图片大小不能超过 2MB!');
 }
 return isJPG && isLt2M;
 },
 handleAvatarSuccess(res, file) {//图片上传成功
 console.log(res);
 console.log(file);
 this.imageUrl = URL.createObjectURL(file.raw);
 },
 handleExceed(files, fileList) {//图片上传超过数量限制
 this.$message.error('上传图片不能超过6张!');
 console.log(file, fileList);
 },
 imgUploadError(err, file, fileList){//图片上传失败调用
 console.log(err)
 this.$message.error('上传图片失败!');
 }
 }
 }

3.controller

@RequestMapping(value = "/imgUpload")
 public Wrapper imgUpload(HttpServletRequest req, MultipartHttpServletRequest multiReq)
  throws IOException {
 System.out.println("---" + fileUploadPath);//我这里用的springboot 在application.properties中配置,使用@Value 获取的文件上传目录
 
 MultipartFile file = multiReq.getFile("file");
 String originalFilename = file.getOriginalFilename();
 String suffix = originalFilename.substring(originalFilename.indexOf("."));
 String localFileName = MD5Util.md5(file.getInputStream()) + suffix;
 File localFile = new File(fileUploadPath + localFileName);
 if (!localFile.exists()) {
  localFile.createNewFile();
 
  FileOutputStream fos = new FileOutputStream(
   localFile);
  FileInputStream fs = (FileInputStream) multiReq.getFile("img").getInputStream();
  byte[] buffer = new byte[1024];
  int len = 0;
  while ((len = fs.read(buffer)) != -1) {
  fos.write(buffer, 0, len);
  }
  fos.close();
  fs.close();
 
 } else {
  log.info("文件已存在!!");
 }
 
 return WrapMapper.wrap(
  Wrapper.SUCCESS_CODE,
  Wrapper.SUCCESS_MESSAGE,
  "http://localhost:8080/img/" + localFileName);//这里是我执行封装的返回结果,也可以使用map,
 }

4.MD5工具类

import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
public class MD5Util {
 
 private static char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
  '9', 'a', 'b', 'c', 'd', 'e', 'f'};
 
 public static String getMd5Sum(String inputStr)
  throws NoSuchAlgorithmException {
 MessageDigest digest = MessageDigest.getInstance("MD5");
 byte[] inputStrByte = inputStr.getBytes();
 digest.update(inputStrByte, 0, inputStrByte.length);
 
 byte[] md5sum = digest.digest();
 
 StringBuffer sb = new StringBuffer();
 for (int i = 0; i < 16; i++) {
  char[] ob = new char[2];
  ob[0] = Digit[md5sum[i] >> 4 & 0x0F];
  ob[1] = Digit[md5sum[i] & 0x0F];
  String s = new String(ob);
  sb.append(s);
 }
 
 return sb.toString();
 }
 
 /**
 * 对字符串进行 MD5 加密
 *
 * @param str
 *  待加密字符串
 *
 * @return 加密后字符串
 */
 public static String md5(String str) {
 MessageDigest md5 = null;
 try {
  md5 = MessageDigest.getInstance("MD5");
  md5.update(str.getBytes("UTF-8"));
 } catch (NoSuchAlgorithmException e) {
  throw new RuntimeException(e.getMessage());
 } catch (UnsupportedEncodingException e) {
  throw new RuntimeException(e.getMessage());
 }
 byte[] encodedValue = md5.digest();
 int j = encodedValue.length;
 char finalValue[] = new char[j * 2];
 int k = 0;
 for (int i = 0; i < j; i++) {
  byte encoded = encodedValue[i];
  finalValue[k++] = Digit[encoded >> 4 & 0xf];
  finalValue[k++] = Digit[encoded & 0xf];
 }
 
 return new String(finalValue);
 }
 
 /**
 * 签名字符串
 *
 * @param text
 *  需要签名的字符串
 * @param sign
 *  签名结果
 * @return 签名结果
 */
 public static boolean verify(String text, String sign) {
 String mysign = md5(text);
 if (mysign.equals(sign)) {
  return true;
 } else {
  return false;
 }
 }
 
 /**
 * 对文件进行 MD5 加密
 *
 * @param file
 *  待加密的文件
 *
 * @return 文件加密后的 MD5 值
 * @throws IOException
 */
 public static String md5(File file) throws IOException {
 FileInputStream is = new FileInputStream(file);
 return md5(is);
 
 }
 
 
 public static String md5(InputStream inputStream) throws IOException {
 
 MessageDigest md5 = null;
 try {
  md5 = MessageDigest.getInstance("MD5");
  int n = 0;
  byte[] buffer = new byte[1024];
  do {
  n = inputStream.read(buffer);
  if (n > 0) {
   md5.update(buffer, 0, n);
  }
  } while (n != -1);
  inputStream.skip(0);
 } catch (NoSuchAlgorithmException e) {
  throw new RuntimeException(e.getMessage());
 } finally {
  inputStream.close();
 }
 
 byte[] encodedValue = md5.digest();
 
 int j = encodedValue.length;
 char finalValue[] = new char[j * 2];
 int k = 0;
 for (int i = 0; i < j; i++) {
  byte encoded = encodedValue[i];
  finalValue[k++] = Digit[encoded >> 4 & 0xf];
  finalValue[k++] = Digit[encoded & 0xf];
 }
 return new String(finalValue);
 }
}

5.效果

Vue + Element UI图片上传控件使用详解

6.主要参考文档 element 官方中文文档,文档中好多属性介绍很笼统不够详细,个人感觉比较坑。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js计算两个时间之间天数差的实例代码
Nov 19 Javascript
table行随鼠标移动变色示例
May 07 Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
Mar 06 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
javascript实现消灭星星小游戏简单版
Nov 15 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
Jul 24 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
Nov 09 Javascript
jQuery中的for循环var与let的区别
Apr 21 jQuery
精读《Vue3.0 Function API》
May 20 Javascript
微信小程序实现时间戳格式转换
Jul 20 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
Sep 08 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
Aug 20 #Javascript
ES6中Symbol、Set和Map用法详解
Aug 20 #Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
Aug 20 #Javascript
node中使用log4js4.x版本记录日志的方法
Aug 20 #Javascript
vue 获取视频时长的实例代码
Aug 20 #Javascript
vue+elementUI实现图片上传功能
Aug 20 #Javascript
vue+elementUi图片上传组件使用详解
Aug 20 #Javascript
You might like
深入解析php之sphinx
2013/05/15 PHP
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
详解使用vuex进行菜单管理
2017/12/21 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
Python设计模式之代理模式实例
2014/04/26 Python
python版飞机大战代码分享
2018/11/20 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
pandas apply多线程实现代码
2020/08/17 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
职业生涯规划怎么写
2013/12/29 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
中学生评语大全
2014/04/18 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
Python echarts实现数据可视化实例详解
2022/03/03 Python