vue使用el-upload上传文件及Feign服务间传递文件的方法
作者:liuhh 发布时间:2024-04-28 10:54:45
一、前端代码
<el-upload class="step_content" drag
action="string"
ref="upload"
:multiple="false"
:http-request="createAppVersion"
:data="appVersion"
:auto-upload="false"
:limit="1"
:on-change="onFileUploadChange"
:on-remove="onFileRemove">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
</el-upload>
<div class="mgt30">
<el-button v-show="createAppVisible" :disabled="createAppDisable" type="primary" class="mgt30"
@click="onSubmitClick">立即创建
</el-button>
</div>
....
onSubmitClick() {
this.$refs.upload.submit();
},
createAppVersion(param) {
this.globalLoading = true;
const formData = new FormData();
formData.append('file', param.file);
formData.append('appVersion', JSON.stringify(this.appVersion));
addAppVersionApi(formData).then(res => {
this.globalLoading = false;
this.$message({message: '创建APP VERION 成功', type: 'success'});
this.uploadFinish();
}).catch(reason => {
this.globalLoading = false;
this.showDialog(reason);
})
},
说明:
el-upload 的 ref="upload" 给这个组件起个变量名,以便 js逻辑代码可以引用
http-request="createAppVersion" el-upload 上传使使用自定义的方法
:data="appVersion" 上传时提交的表单数据
onSubmitClick 方法中会调用el-upload.submit()方法,进而调用createAppVersion()方法
组成表单参数,取得上传的file 和 其它参数
const formData = new FormData();
formData.append('file', param.file);
formData.append('appVersion', JSON.stringify(this.appVersion));
6.addAppVersionApi 最终会调用下面的方法,其中formData就是param, 请求需要加header: 'Content-Type': 'multipart/form-data'
function httpPostMutipartFileAsyn(url, param) {
return new Promise((resolve, reject) => {
request({
url: url,
headers: {
'Content-Type': 'multipart/form-data'
},
method: 'post',
data: param
}).then(response => {
if (response.data.status.code === 0) {
resolve(response.data)
} else {
reject(response.data.status)
}
}).catch(response => {
reject(response)
})
})
}
二、后端代码
1.后端controller接口
@PostMapping("/version/add")
public RestResult addAppVersion(@RequestParam("appVersion") String appVersion,
@RequestParam("file") MultipartFile multipartFile) {
....
return new RestResult();
}
三、Feign 实现服务间传递MultipartFile参数
Controller的addAppVersion()接口,收到上传的文件后,需要通过Http调用远程接口,将文件上传到资源服务。一开始尝试使用OKHttp 和 RestTemplate 实现,但是这两种方法都必须将文件先保存,无法直接传递MultipartFile参数,然后才能通过OKHttp 和 RestTemplate提供的相关接口去实现。 本着不想在本地保存临时文件的,找到了通过Feign解决的一种方式
1.添加如下依赖:
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
2.Feign 接口实现
@FeignClient(name = "resource-client",url = "http://xxxx",path = "resource",configuration = ResourceServiceFeignClient.MultipartSupportConfig.class)
public interface ResourceServiceFeignClient {
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Resource upload(@RequestPart("file") MultipartFile file);
class MultipartSupportConfig {
@Bean
public Encoder feignFormEncoder() {
return new SpringFormEncoder();
}
}
}
这里Feign是通过url实现的接口调用,并没有通过SpringCloud注册中心服务发现来实现接口调用,因为我所在的项目是独立在服务化体系外的
3.将Feign接口自动注入,正常使用就行了。
来源:https://segmentfault.com/a/1190000018509103


猜你喜欢
- pylint是一个不错的代码静态检查工具。将其配置在pycharm中,随时对代码进行分析,确保所有代码都符合pep8规范,以便于养成良好的习
- 如下:re.split(pattern, string, [maxsplit], [flags])pattern:表示模式字符串,由要匹配的
- 前言Python语言处理字符串、数组类的问题时有一定概率需要使用切片方法,比如:Leetcode_5。学习官方解法时发现切片的索引可以超出字
- 在用jupyter notebook写python代码的过程中会产生很多变量,而关闭后或者restart jupyter kernel后所有
- SQL Server 2005开始支持XML数据类型,提供原生的XML数据类型、XML索引及各种管理或输出XML格式的函数。随着JSON的流
- 现在基于WEB页的HTML的编辑器在新闻系统,文章系统中用得越来越广,一个网页一粘就可以保持原来的样式,同时图片也可以在这个页中保持。但是在
- python随机数种子seed()栗子1import numpy as npimport randomrandom.seed(0)np.ra
- 在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!有时候我们写程序的时候,会出现一
- 在 linux 系统中连接 mdb 数据库,直接连接的话,mdb 默认的驱动无法识别非 windows 的路径, 所以不能使用常规的连接方式
- 今天来讲一下一些实现html中表格隔行换色的方法,即每隔一个行表格的背景色就不同,有静态html/css实现的,也有asp动态实现的。这个功
- 变量当把一个值赋给一个名字时,它就会存储在内存中,我们把这块内存称为变量(variable)。在大多数语言中,都把这种行为称为"给
- MSSQL2000安全设置Sql server 2000建立独立帐号数据库方法首先我们启动Sql server 2000数据库,并打开企业管
- 一、re.findall函数介绍它在re.py中有定义:def findall(pattern, string, flags=0): &nb
- 通常在多个不等式的时候,需要分着写,比如x = 1if x>0 and x<3: print(True)但是在Python中居然
- 环境准备前提已经安装好python、pycharm,配置了对应的环境变量。1、安装selenium模块文件–>设置
- oracle排序后如何获取第一条数据场景想要获取下列sql的数据的第一条select NEXT_FOLLOWUP_DATE fr
- 在开始安装前,先说明一下mysql-5.6.4与较低的版本在安装上的区别,从mysql-5.5起,mysql源码安装开始使用cmake了,因
- 缺省的Perl调试器就是perl解释器本身,另外还有图形界面的调试器。由于在开发程序时一般都使用telnet访问服务器,因此本文主要为大家介
- defer关键字defer关键字可以让函数或语句延迟到函数语句块的最结尾时,即即将退出函数时执行,即便函数中途报错结束、即便已经panic(
- 总体思路与一元线性回归思想一样,现在将数据以矩阵形式进行运算,更加方便。 一元线性回归实现代码下面是多元线性回归用Python实现的代码:i