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 相关文章推荐
javascript下过滤数组重复值的代码
Sep 10 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
Feb 07 Javascript
this和执行上下文实现代码
Jul 01 Javascript
JavaScript中的null和undefined区别介绍
Jan 01 Javascript
js 弹出虚拟键盘修改密码的简单实例
Oct 10 Javascript
canvas绘制环形进度条
Feb 23 Javascript
实现两个文本框同时输入的实例
Sep 25 Javascript
基于Two.js实现星球环绕动画效果的示例
Nov 06 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
Nov 05 Javascript
JavaScript计算正方形面积
Nov 26 Javascript
通过js随机函数Math.random实现乱序
May 19 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
phpize的深入理解
2013/06/03 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
javascript中Object使用详解
2015/01/26 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
详解如何更好的使用module vuex
2019/03/27 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
用Python配平化学方程式的方法
2019/07/20 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
管理学专业个人求职信范文
2013/12/13 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
2014年采购工作总结
2014/11/20 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
详解SQL报错盲注
2022/07/23 SQL Server