springboot + vue + elementui — upload解决跨域、实现图片上传

今日记录通过elementui上传时得到的问题。

我们在本地部署的服务,前端服务请求后端接口,存在跨域问题,

1.可以利用springboot解决跨域问题,这里不列举

2.利用vue配置进行反向代理。

vue解决跨域

在vue.config.js文件中配置

const { defineConfig } = require('@vue/cli-service')module.exports = defineConfig({transpileDependencies: true,// 跨域请求devServer: {port: 8080,// 开启代理proxy: {'/api': {// 后端地址target: 'http://localhost:8081/',// 允许跨域changeOrigin: true,// 路径重写:我们可以应/api,替代上述后端urlpathRewrite: {'^/api': '/'}}}}})

图片上传

java代码如下:

@RestController
@RequestMapping("/common")
@Api(tags = "文件controller")
public class CommonController {@Value("${reggie.path}")private String basePath;@ApiOperation("文件上传")@PostMapping("/upload")public Result upLoad(@RequestParam("file") MultipartFile file) {// 原始文件名   abc.jpcString originalFilename = file.getOriginalFilename();// 获取文件类型(jpg、png)  .jpcString suffix = originalFilename.substring(originalFilename.lastIndexOf("."));// 使用UUID重新生成文件名,防止文件名重复String fileName = UUID.randomUUID() + suffix;// 创建目录File dir = new File(basePath);if(!dir.exists()) {dir.mkdirs();}try {file.transferTo(new File(basePath + fileName)); // 当前目录下,生成图片,我们将这个路径返回} catch (IOException e) {e.printStackTrace();}return Result.success("文件上传成功", fileName);}@ApiOperation("文件下载")@GetMapping("/download")public void downLoad(String name, HttpServletResponse response) {try {// 输入流,通过输入流读取文件内容FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));// 输出流,通过输出流将文件写回浏览器ServletOutputStream outputStream = response.getOutputStream();response.setContentType("image/jpeg");int len = 0;byte[] bytes = new byte[1024]; // 缓存while ((len = fileInputStream.read(bytes)) != -1) {outputStream.write(bytes, 0, len);outputStream.flush();}//关闭资源outputStream.close();fileInputStream.close();} catch (Exception e) {e.printStackTrace();}}}

 

vue代码如下:

 <el-upload action="/api/common/upload" //后端请求上传图片接口list-type="picture-card" :show-file-list="false" // 开启上传图片列表:on-success="handleAvatarSuccess" // 成功响应后调用api,主要是这个:before-upload="beforeAvatarUpload" //上传之前调用api><i class="el-icon-plus"></i>
</el-upload>
  <img :src="infoForm.avatar" alt="编辑头像" class="update-img">

我们后端指定上传图片路径如上,当我们点击上传图片时,请求后端接口,图片会缓存到上述位置 ,并且会被如下函数接收到。

// 获得上传图片的urlhandleAvatarSuccess(res, file) {console.log(file, res);this.infoForm.avatar = 'images/' + res.data// 拿到二进制数据,是blob类型,存储到浏览器内存中,一刷新数据会消失// console.log("imgUrl:", URL.createObjectURL(file.raw));},

具体接受结果。 

以上,我们可以2种方式,拿到图片url:

  1.  获取blob,url,但是一刷新图片会消失,因为blob url表示的图片是在浏览器内存中,而不是存储在硬盘上。
  2.  利用images/ + 图片名字.jpg

具体就是: 我们后端缓存路径就是,vue项目中的public/images文件夹。

为什么这样使用呢?

浅谈一下:

1.经过webpack打包的vue项目结构会发生改变,我们原有的图片路径会失效。

2.public文件下,相当于是静态资源,不会经过webpack打包。

3.vue对于静态路径和动态路径(变量)的解析不一样。

具体看如下:

vue图片路径问题_本郡主是喵的博客-CSDN博客

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

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

相关文章

Datax抽取mysql的bit类型数据

背景&#xff1a;使用datax抽取mysql的一张表&#xff0c;里面有两个bit类型的字段&#xff0c;抽取出来显示如下&#xff1a; 需要在抽取reader里面进行处理配置 最终生成的datax的json文件reader的配置会转换为具体的数值 最终查询效果&#xff1a;

【UE 材质】制作飘动的旗帜

效果 步骤 1. 首先在建模软件中创建一个平面&#xff0c;注意分段数一定要多 2. 在UE中创建一个材质&#xff0c;这里命名为“Mat_Flag” 打开“Mat_Flag”&#xff0c;先将旗帜纹理连接到基础颜色 先选中导入的模型然后点击根据选中的模型预览材质 创建如下节点可以看到此时模…

2023物联网新动向:WEB组态除了用于数据展示,也支持搭建业务逻辑,提供与蓝图连线和NodeRed规则链类似的可视化编程能力

前言 组态编辑在工业控制、物联网场景中十分常见&#xff0c;越来越多的物联网平台也把组态作为一项标配功能。 物联网产业链自下往上由“端 - 边 - 管 - 云 -用”多个环节构成&#xff0c;组态通常是用于搭建数据展示类型的应用&#xff0c;而随着系统集成度越来越高&#x…

JavaScript基础

JavaScript 1.js基础 持续更新, 1.JavaScript 的诞生 ​ JavaScript 诞生于 1995 年。由Netscape(网景公司)的程序员Brendan Eich(布兰登)与Sun公司联手开发一门脚本语言, 最初名字叫做Mocha&#xff0c;1995年9月改为LiveScript。12月&#xff0c;Netscape公司与Sun公司&a…

网络编程 day 7

1、将.txt表数据导入数据库中 #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)int main(int argc, const char *argv[]) {//以只读的方式打开dict.txt文件FILE* fd;if((fdfopen("./dict.txt&q…

windows编程之线程同步万字总结(创建线程,互斥对象,互斥事件,信号量,关键段,多线程群聊服务器)

文章目录 创建线程方法一_beginthreadex函数讲解使用示例&#xff1a; 方法二CreateThread函数讲解:使用示例: 互斥对象:创建互斥对象CreateMutex 互斥事件介绍创建或打开一个未命名的互斥事件对象 信号量介绍信号量的相关函数使用示例 关键段相关函数错误使用示例正确使用示例…

Android12之解析/proc/pid进程参数(一百六十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Streamlit项目:乐高风格马赛克设计工坊~打造个性化马赛克图案的平台

文章目录 1 前言2 项目概述2.1 项目背景和目标2.2 功能和特性2.3 技术实现2.4 开发计划2.5 预期成果2.6 应用场景 3 使用指南3.1 源代码使用指南3.2 普通网页用户使用指南3.3 文件保存3.3.1 导出图像文件3.3.2 获取像素RGB数据 3.4 注意事项 4 实现细节4.1 准备工作4.2 编写代码…

你为什么总招不到对的人?

办公室里&#xff0c;技术面试官Arron 和 HR 正对近期的招聘失误进行争执——新招的技术岗试用了几个月&#xff0c;就因能力不足离开了。 HR 不断吐槽岗位画像太模糊&#xff0c;Arron 反问&#xff1a;“不是给了你关键词吗&#xff1f;” HR 气不打一处来&#xff1a;“你…

Spring IOC的理解

总&#xff1a; 控制反转&#xff08;IOC&#xff09;&#xff1a;理论思想&#xff0c;传统java开发模式&#xff0c;对象是由使用者来进行管理&#xff0c;有了spring后&#xff0c;可以交给spring来帮我们进行管理。依赖注入&#xff08;DI&#xff09;&#xff1a;把对应的…

[构建 Vue 组件库] 小尾巴 UI 组件库 —— 横向商品卡片(仿淘宝)

文章归档于&#xff1a;https://www.yuque.com/u27599042/row3c6 组件库地址 npm&#xff1a;https://www.npmjs.com/package/xwb-ui?activeTabreadmegitee&#xff1a;https://gitee.com/tongchaowei/xwb-ui 下载 npm i xwb-ui配置 按需导入 import {组件名 } from xwb-…

解耦只是一个巧合?

本文分享一篇在IJCAI2023看到的文章&#xff1a;Overlooked Implications of the Reconstruction Loss for VAE Disentanglement 首先回顾下VAE&#xff0c;其loss函数有两项&#xff0c;一项是重构误差&#xff0c;另一项是正则项&#xff1a; L r e c ( x , x ^ ) E q ϕ (…

Unity——脚本与导航系统

Unity内置了一个比较完善的导航系统&#xff0c;一般称为Nav Mesh&#xff08;导航网格&#xff09;&#xff0c;用它可以满足大多数游戏中角色自动导航的需求。 一、导航系统相关组件 Unity的导航系统由以下几个部分组成&#xff1a; Nav Mesh。Nav Mesh与具体的场景关联&…

Windows Qt 5.12.10下载与安装

Qt 入门实战教程&#xff08;目录&#xff09; C自学精简教程 目录(必读) 1 Qt下载 qt-opensource-windows-x86-5.12.10.exe 官方离线安装包&#xff1a;Download Source Package Offline Installers | Qt 下载巨慢 只能下载到最新的&#xff1a;https://download.qt.io/a…

JVM | 垃圾回收器(GC)- Java内存管理的守护者

引言 在编程世界中&#xff0c;有效的内存管理是至关重要的。这不仅确保了应用程序的稳定运行&#xff0c;还可以大大提高性能和响应速度。作为世界上最受欢迎的编程语言之一&#xff0c;通过Java虚拟机内部的垃圾回收器组件来自动管理内存&#xff0c;是成为之一的其中一项必…

Speech | 语音处理,分割一段音频(python)

本文主要是关于语音数据在处理过程中的一些脚本文件以及实例&#xff0c;所有代码只需要更改所需处理的文件路径&#xff0c;输出路径等&#xff0c;全部可运行。 目录 所需环境 方法1&#xff1a;将一整段音频按时间批量切成一个一个音频 方法2&#xff1a;将一整段音频按…

C++的类型转换

前言 我们都知道C是兼容C语言的在C语言中存在两种方式的类型转换&#xff0c;分别是隐式类型转换和显示类型转换&#xff08;强制类型转换&#xff09;&#xff0c;但是C觉得C语言的这套东西是够好&#xff0c;所以在兼容C语言的基础上又搞了一套自己的关于类型转换的东西。 目…

2023高教社杯数学建模C题思路代码 - 蔬菜类商品的自动定价与补货决策

# 1 赛题 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

mysql创建用户

创建用户 创建 -- 创建用户 itcast , localhost只能够在当前主机localhost访问, 密码123456; create user test01localhost identified by 123456;使用命令show databases;命令&#xff0c;只显示一个数据库&#xff0c;因为没有权限 -- 创建用户 test02, 可以在任意主机访问…

Stream API

Stream API执行流程 Stream API(java.util.stream)把真正的函数式编程风格引入到Java中,可以极大地提高程序员生产力&#xff0c;让程序员写出高效、简洁的代码 实际开发中项目中多数数据源都是来自MySQL、Oracle等关系型数据库,还有部分来自MongDB、Redis等非关系型数据库 …