Vue【七】实现图片上传与预览

前端

图片上传

<template><div class="comment-wrapper"><el-form :model="form" style="    padding: 20px;" label-width="80px"><el-form-item label="评价内容"><el-input v-model="form.comment_content"  type="textarea"></el-input></el-form-item><el-form-item label="上传图片"><el-uploadaction="http://localhost:8081/upload/file"list-type="picture-card":on-preview="handlePictureCardPreview":on-success="uploadSuccess":on-remove="handleRemove"><i class="el-icon-plus"></i></el-upload><el-dialog :visible.sync="dialogVisible"><img width="100%" :src="dialogImageUrl" alt=""></el-dialog></el-form-item><el-form-item style="margin-top: 15px"><el-button type="primary" @click="submitForm">提交评价</el-button></el-form-item></el-form></div>
</template><script>
export default {name: "Comment",data() {return {dialogImageUrl: '',dialogVisible: false,img_url_list:[],form: {comment_username: window.sessionStorage.getItem("token"),comment_content: '',comment_img_url: ''}};},methods: {uploadSuccess(response, file, fileList) {this.img_url_list.push(response.data);},handleRemove(file, fileList) {console.log(1, this.img_url_list);let name = file.response.data;for (let i=0; i<this.img_url_list.length; i++){if (this.img_url_list[i] == name){this.img_url_list.splice(i, 1)}}console.log(1, this.img_url_list);},handlePictureCardPreview(file) {this.dialogImageUrl = file.url;this.dialogVisible = true;},submitForm() {if(this.img_url_list.length > 0){let str = '';for (var i = 0; i < this.img_url_list.length; i++) {str += this.img_url_list[i]+ ",";}str = str.substr(0, str.length - 1);this.form.comment_img_url=str;}this.$http.post("/comment/add", this.form).then(result => {this.$message.success("评论成功");this.$router.push('/order');})}},created() {let orderId = this.$route.query.orderId;this.form.order_id = orderId;}}
</script><style scoped>
.comment-wrapper{margin: 15px;box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);border-radius: 15px;height: 500px;
}
/deep/ .el-form-item{width: 50%;margin: 15px auto;
}
/deep/ .el-textarea__inner{height: 150px;
}
.avatar-uploader {display: flex;justify-content: center;align-items: center;
}.avatar {width: 100px;height: 100px;object-fit: cover;
}.avatar-uploader-icon {font-size: 28px;color: #8c939d;
}
</style>

图片预览

 <div class="comment-img" v-for="img in item.comment_img_list"><img :src="img" @click="open(img)"/></div>
 open(src){this.$alert('<img style="width: 100%" src="'+src+'"></img>', '', {dangerouslyUseHTMLString: true});},

后台代码

package com.wang.wangblog.controller.admin;import com.wang.wangblog.config.Constants;
import com.wang.wangblog.model.Vo.Result;
import com.wang.wangblog.utils.MyBlogUtils;
import com.wang.wangblog.utils.ResultGenerator;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;@Controller
@RequestMapping("/admin")
public class UploadController {@Value("${upload.path:E:\\imgs}")private String path;@PostMapping({"/upload/file"})@ResponseBodypublic Result upload(HttpServletRequest httpServletRequest, @RequestParam("file") MultipartFile file) throws URISyntaxException {String fileName = file.getOriginalFilename();String suffixName = fileName.substring(fileName.lastIndexOf("."));//生成文件名称通用方法SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");Random r = new Random();StringBuilder tempName = new StringBuilder();tempName.append(sdf.format(new Date())).append(r.nextInt(100)).append(suffixName);String newFileName = tempName.toString();String month = new SimpleDateFormat("yyyyMM").format(new Date()) + File.separator;String destPath =  path + month;File fileDirectory = new File(destPath);//创建文件File destFile = new File(destPath + newFileName);try {if (!fileDirectory.exists()) {if (!fileDirectory.mkdir()) {throw new IOException("文件夹创建失败,路径为:" + fileDirectory);}}file.transferTo(destFile);} catch (IOException e) {e.printStackTrace();}Result result = ResultGenerator.genSuccessResult();result.setData(MyBlogUtils.getHost(new URI(httpServletRequest.getRequestURL() + "")) + "/upload/" +month+ newFileName);return result;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/769910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人信息-求职[web前端]

我有近近10年开发及6年的管理经验Web前端,所负责的技术团队经历了 Web 前端几代技术变革&#xff0c;参与了几乎&#xff0c;在性能优化、开发效率、所有前端相关项目工程化架构选型上都有丰厚的产出。在上家致力于数据安全前端的相关工作&#xff0c;专注于Vue.js技术栈来推进…

面试官:说一说 Spring 与 SpringBoot 的区别?

Spring 为开发 Java 应用程序提供了全面的基础架构支持&#xff0c;它将 Java 对象交由容器统一管理&#xff0c;从而实现控制反转&#xff08;IOC&#xff09;和依赖注入&#xff08;DI&#xff09;&#xff0c;并提供了一些常用模块如 SpringAOP、SpringJDBC、SpringMVC 等等…

jmeter接口导入方式

curl直接导入 1、操作页面后&#xff0c;F12查看接口&#xff0c;右击接口-copy-copy as cURL 2、jmeter 工具-import from cURL&#xff0c;粘贴上面复制的curl 根据接口文档导入 1、接口文档示例如下&#xff1a; Path&#xff1a; /api/jobs/xps/exec Method&#xf…

私人健身与教练预约管理系统设计与实现|SpringBoot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;…

MySQL 练习二

表数据&#xff1a; CREATE TABLE J_TEACHER (tno int NOT NULL PRIMARY KEY,tname varchar(20) NOT NULL);CREATE TABLE J_STUDENT(sno int NOT NULL PRIMARY KEY,sname varchar(20) NOT NULL,sage datetime NOT NULL,ssex char(2) NOT NULL);CREATE TABLE J_COURSE(cno int …

kubernetes最小调度单元Pod概述

Pod概述 一.Pod的概念1.Pod是什么2.Pod网络共享实现方式3.Pod存储共享方式4.创建Pod的流程 二.使用YAML文件定义Pod资源1.Pod资源清单YAML文件书写技巧1.YAML语法格式&#xff1a;2.配置Linux tab缩进两个空格3.使用kubectl explain帮助命令 2.创建Pod及Pod常用命令1.创建Pod资…

js中多重引号会导致函数的参数失效报错-Invalid or unexpected token

在js使用中我们经常会使动态添加html信息到元素对象中&#xff0c;且还加入了函数及其&#xff0c;函数对应参数&#xff0c;这个时候就会使用多重引号去拼接&#xff0c;如果拼接中没有做引号的转义&#xff0c;就会出现Invalid or unexpected token。 例如以下代码&#xff0…

利器 | 测试必会之 Linux 三剑客 ( grep / awk / sed )

Linux 给人的印象是黑乎乎的神秘窗口&#xff0c;文本操作和数据处理似乎没有 Windows 窗口界面直观方便。其实Linux 有自己的独特的法宝&#xff0c;称之为三剑客&#xff1a;grep&#xff0c;awk 和 sed。你可以用这三件法宝很方便的处理数据 &#xff1a;查找&#xff0c;分…

【中间件】docker数据卷

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;中间件 ⛺️稳中求进&#xff0c;晒太阳 1.数据卷&#xff08;容器数据管理&#xff09; 修改nginx的html页面时&#xff0c;需要进入nginx内部。并且因为内部没有编辑器&#xff0c;修改…

速盾:免备案防攻击cdn

在互联网时代&#xff0c;网站安全和防御攻击成为了每个网站所有者都需要关注的重要问题。随着网络攻击手段的不断进化和攻击频率的不断增加&#xff0c;传统的防火墙和安全策略已经无法满足现代网络安全的需求。针对这一问题&#xff0c;出现了许多新的防御手段和技术&#xf…

Redis - 高并发场景下的Redis最佳实践_翻过6座大山

文章目录 概述6座大山之_缓存雪崩 &#xff08;缓存全部失效&#xff09;缓存雪崩的两种常见场景如何应对缓存雪崩&#xff1f; 6座大山之_缓存穿透&#xff08;查询不存在的 key&#xff09;缓存穿透的原因解决方案1. 数据校验2. 缓存空值3. 频控4. 使用布隆过滤器 6座大山之_…

Java项目:73 ssm档案管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 角色&#xff1a;管理员、用户 用户点击进入到系统操作界面&#xff0c;可以对个人中心、警察信息管理、事故信息管理、申诉信息管理等功能模…

基于java+springboot+vue实现的医院门诊信息管理系统(文末源码+Lw+ppt)23-325

摘 要 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对医院门诊信息的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而…

微服务高级篇(四):多级缓存:Nginx本地缓存 --- Redis缓存 --- 进程缓存

文章目录 一、多级缓存概念二、准备工作【导入案例&#xff0c;并搭建Nginx反向代理】2.1 导入商品案例2.1.1 安装MySQL2.1.2 导入SQL2.1.3 导入Demo工程2.1.4 启动2.1.5 导入商品查询页面 三、JVM进程缓存【第三级缓存】3.1 本地进程缓存与分布式缓存的区别3.2 本地进程缓存&a…

DiskGenius克隆的硬盘副本通过EasyUEFI重建引导并启动

0. 使用DiskGenius克隆硬盘副本。可能用于备份&#xff0c;可能用于换硬盘类型&#xff0c;也可能是硬盘整体扩容。DiskGenius可以方便的通过克隆硬盘来实现硬盘分区扩容。硬盘整体空间增大&#xff0c;每个分区大小也可以调整并增大。 1. 进入PE系统&#xff0c;使用EasyUEFI…

Android 开发制作系统签名

一、使用命令签名 这种方式不需要系统源码编译环境&#xff0c;可以直接对 apk 文件进行签名。 1、获取系统签名文件 首先&#xff0c;从系统源码环境中获取制作系统签名所需相关文件&#xff0c;在 build/target/product/security/ 下的 platform.pk8 和 platform.x509.pem。…

DC-4靶机

一.环境搭建 1.下载地址 靶场下载地址:https://download.vulnhub.com/dc/DC-4.zip 下载不下来用迅雷下载 2.虚拟机配置 切换为nat模式 开启靶机&#xff0c;遇到所有的错误直接点重试或者是&#xff0c;开启后呈现为下图即可 二.开始渗透 1.信息收集 老规矩&#xff0c;…

【排序算法】插入排序与选择排序详解

文章目录 &#x1f4dd;选择排序是什么&#xff1f;&#x1f320;选择排序思路&#x1f309; 直接选择排序&#x1f320;选择排序优化&#x1f320;优化方法&#x1f309;排序优化后问题 &#x1f320;选择排序效率特性 &#x1f309;插入排序&#x1f320;插入排序实现 &#…

简单了解单例模式

什么是单例模式 对于一个类&#xff0c;只有一个实例化的对象&#xff0c;我们构建单例模式一般有两种&#xff1a;饿汉式和懒汉式 饿汉式 优点是无线程安全问题&#xff0c;类加载就创建对象缺点是占内存 class Singleton01{private static Singleton01 instance new Sing…

objection命令语句大全简洁版

一、objection基础命令 1、过root检测 objection -g 包名 explore --startup-command "android root disable"2、过sll证书效验 objection -g 包名 explore --startup-command "android sslpinning disable"二、基础命令 进入命令 objection -g 包名 explo…