vue使用el-upload上传文件及Feign服务间传递文件的方法
一、前端代码
将文件拖到此处,或点击上传
说明:
- el-upload的ref="upload"给这个组件起个变量名,以便js逻辑代码可以引用
- http-request="createAppVersion"el-upload上传使使用自定义的方法
- :data="appVersion"上传时提交的表单数据
- onSubmitClick方法中会调用el-upload.submit()方法,进而调用createAppVersion()方法
- 组成表单参数,取得上传的file和其它参数
constformData=newFormData(); formData.append('file',param.file); formData.append('appVersion',JSON.stringify(this.appVersion));
6.addAppVersionApi最终会调用下面的方法,其中formData就是param,请求需要加header:'Content-Type':'multipart/form-data'
functionhttpPostMutipartFileAsyn(url,param){ returnnewPromise((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") publicRestResultaddAppVersion(@RequestParam("appVersion")StringappVersion, @RequestParam("file")MultipartFilemultipartFile){ .... returnnewRestResult(); }
三、Feign实现服务间传递MultipartFile参数
Controller的addAppVersion()接口,收到上传的文件后,需要通过Http调用远程接口,将文件上传到资源服务。一开始尝试使用OKHttp和RestTemplate实现,但是这两种方法都必须将文件先保存,无法直接传递MultipartFile参数,然后才能通过OKHttp和RestTemplate提供的相关接口去实现。本着不想在本地保存临时文件的,找到了通过Feign解决的一种方式
1.添加如下依赖:
io.github.openfeign.form feign-form 3.0.3 io.github.openfeign.form feign-form-spring 3.0.3 commons-fileupload commons-fileupload 1.3.3
2.Feign接口实现
@FeignClient(name="resource-client",url="http://xxxx",path="resource",configuration=ResourceServiceFeignClient.MultipartSupportConfig.class) publicinterfaceResourceServiceFeignClient{ @PostMapping(value="/upload",consumes=MediaType.MULTIPART_FORM_DATA_VALUE) Resourceupload(@RequestPart("file")MultipartFilefile); classMultipartSupportConfig{ @Bean publicEncoderfeignFormEncoder(){ returnnewSpringFormEncoder(); } } }
这里Feign是通过url实现的接口调用,并没有通过SpringCloud注册中心服务发现来实现接口调用,因为我所在的项目是独立在服务化体系外的
3.将Feign接口自动注入,正常使用就行了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。