SpringCloud使用Feign文件上传、下载

网友投稿 1400 2023-01-08


SpringCloud使用Feign文件上传、下载

文件上传、下载也是实际项目中会遇到的场景,本篇我们介绍下springcloud中如何使用feign进行文件上传与下载。

还是使用feign 进行http的调用。

一、Feign文件上传

服务提供方java代码:

/**

* 文件上传

* @param file 文件

* @param fileType

* @return

*/

@fwxoVZRequestMapping(method = RequestMethod.POST, value = "/uploadFile",

produces = {MediaType.APPLICATION_jsON_UTF8_VALUE},

consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

public Strinhttp://g uploadFile(@RequestPart(value = "file") MultipartFile file,

@RequestParam(value = "fileType") String fileType,

HttpServletRequest request,HttpServletResponse response) {

System.out.println("fileType:"+fileType);

long size= file.getSize();

String contentType= file.getContentType();

String name = file.getName();

String orgFilename= file.getOriginalFilename();

System.out.println("size:"+size);

System.out.println("contentType:"+contentType);

System.out.println("name:"+name);

System.out.println("orgFilename:"+orgFilename);

String suffix = orgFilename.substring(orgFilename.lastIndexOf("."));//后缀

String uuid =UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();

File dest = new File("f:/b13/"+uuid+suffix);

try {

file.transferTo(dest);

return dest.getCanonicalPath();//文件的绝对路径

} catch (IllegalStateException | IOException e) {

e.printStackTrace();

}

return "failure";

}

服务提供方Feign api接口:

@RequestMapping(method = RequestMethod.POST, value = "/uploadFile",

produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},

consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

public String uploadFile(@RequestPart(value = "file") MultipartFile file, @RequestParam(value = "fileType") String fileType);

服务消费方:

pom.xml

io.github.openfeign.form

feign-form

3.0.3

io.github.openfeign.form

feign-form-spring

3.0.3

java代码:

@Autowired

private UserProControllerApi userProControllerApi;

@ResponseBody

@RequestMapping("/user_uploadFile")

public Object user_uploadFile(HttpServletRequest request,HttpServletResponse response,

@RequestPart(value = "file") MultipartFile file, String fileType) {

System.out.println(fileType);

return userProControllerApi.uploadFile(file, fileType);

}

MultipartSupportConfig.java

@Configuration

public class MultipartSupportConfig {

@Autowired

private ObjectFactory messageConverters;

@Bean

@Primary

@Scope("prototype")

public Encoder feignEncoder() {

return new SpringFormEncoder(new SpringEncoder(messageConverters));

}

@Bean

public feign.Logger.Level multipartLoggerLevel() {

return feign.Logger.Level.FULL;

}

}

二、Feign文件下载

服务提供方java代码:

/**

* 文件(二进制数据)下载

* @param fileType 文件类型

* @return

*/

@RequestMapping("/downloadFile")

public ResponseEntity downloadFile(String fileType,HttpServletRequest request ){

System.out.println(request.getParameter("fileType"));

System.out.println("参数fileType: "+fileType);

HttpHeaders headers = new HttpHeaders();

ResponseEntity entity = null;

InputStream in=null;

try {

in=new FileInputStream(new File("d:/myImg/001.png"));

byte[] bytes = new byte[in.available()];

String imageName="001.png";

//处理IE下载文件的中文名称乱码的问题

String header = request.getHeader("User-Agent").toUpperCase();

if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {

imageName = URLEncoder.encode(imageName, "utf-8");

imageName = imageName.replace("+", "%20"); //IE下载文件名空格变+号问题

} else {

imageName = new String(imageName.getBytes(), "iso-8859-1");

}

in.read(bytes);

headers.add("Content-Disposition", "attachment;filename="+imageName);

entity = new ResponseEntity(bytes, headers, HttpStatus.OK);

} catch (Exception e) {

e.printStackTrace();

}finally {

if(in!=null) {

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return entity;

}

服务提供方feign api接口

@RequestMapping("/downloadFile")

public ResponseEntity downloadFile(@RequestParam(value = "fileType") String fileType

);

服务消费方

@ResponseBody

@RequestMapping("/user_downloadFile")

public Object user_downloadFile(HttpServletRequest request,HttpServletResponse response,

String fileType) {

ResponseEntity entity = userProControllerApi.downloadFile(fileType);

System.out.println( entity.getStatusCode());

return entity ;

}

注:实际项目中如果上传的文件太大,可以使用ftp服务器保存上传的文件,直接在controller端调用ftp接口即可。

如果下载的文件太大,则调用service端接口可返回一个ftp文件资源路径,然后在controller端调用ftp下载文件即可。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot实现动态定时任务
下一篇:接口自动化框架排行榜(主流自动化框架)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~