SpringCloud使用Feign文件上傳、下載
文件上傳、下載也是實(shí)際項(xiàng)目中會遇到的場景,本篇我們介紹下springcloud中如何使用feign進(jìn)行文件上傳與下載。
還是使用feign 進(jìn)行http的調(diào)用。
一、Feign文件上傳
服務(wù)提供方j(luò)ava代碼:
/**
* 文件上傳
* @param file 文件
* @param fileType
* @return
*/
@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,
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";
}
服務(wù)提供方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);
服務(wù)消費(fèi)方:
pom.xml
<!-- 引入文件feign文件上傳依賴 --> <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>
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<HttpMessageConverters> 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文件下載
服務(wù)提供方j(luò)ava代碼:
/**
* 文件(二進(jìn)制數(shù)據(jù))下載
* @param fileType 文件類型
* @return
*/
@RequestMapping("/downloadFile")
public ResponseEntity<byte[]> downloadFile(String fileType,HttpServletRequest request ){
System.out.println(request.getParameter("fileType"));
System.out.println("參數(shù)fileType: "+fileType);
HttpHeaders headers = new HttpHeaders();
ResponseEntity<byte[]> 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<byte[]>(bytes, headers, HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
}finally {
if(in!=null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return entity;
}
服務(wù)提供方feign api接口
@RequestMapping("/downloadFile")
public ResponseEntity<byte[]> downloadFile(@RequestParam(value = "fileType") String fileType
);
服務(wù)消費(fèi)方
@ResponseBody
@RequestMapping("/user_downloadFile")
public Object user_downloadFile(HttpServletRequest request,HttpServletResponse response,
String fileType) {
ResponseEntity<byte[]> entity = userProControllerApi.downloadFile(fileType);
System.out.println( entity.getStatusCode());
return entity ;
}
注:實(shí)際項(xiàng)目中如果上傳的文件太大,可以使用ftp服務(wù)器保存上傳的文件,直接在controller端調(diào)用ftp接口即可。
如果下載的文件太大,則調(diào)用service端接口可返回一個(gè)ftp文件資源路徑,然后在controller端調(diào)用ftp下載文件即可。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在Java中實(shí)現(xiàn)二叉搜索樹的全過程記錄
二叉樹包含了根節(jié)點(diǎn),孩子節(jié)點(diǎn),葉節(jié)點(diǎn),每一個(gè)二叉樹只有一個(gè)根節(jié)點(diǎn),每一個(gè)結(jié)點(diǎn)最多只有兩個(gè)節(jié)點(diǎn),左子樹的鍵值小于根的鍵值,右子樹的鍵值大于根的鍵值,下面這篇文章主要給大家介紹了關(guān)于如何在Java中實(shí)現(xiàn)二叉搜索樹的相關(guān)資料,需要的朋友可以參考下2022-03-03
JavaWeb響應(yīng)下載功能實(shí)例代碼(包含工具類)
今天通過本文給大家分享的是關(guān)于javaweb的響應(yīng)(response)下載功能,需要的朋友參考下吧2017-07-07
Struts2學(xué)習(xí)筆記(2)-路徑問題解決
本文主要介紹Struts2的路徑問題,盡量不要使用相對路徑,使用相對路徑會讓路徑問題變得很繁瑣很麻煩,推薦使用絕對路徑,希望能給大家做一個(gè)參考。2016-06-06
SpringBoot 引?MybatisGenerator的實(shí)現(xiàn)步驟
本文主要介紹了SpringBoot 引?MybatisGenerator的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
SpringMVC通過模型視圖ModelAndView渲染視圖的實(shí)現(xiàn)
這篇文章主要介紹了SpringMVC通過模型視圖ModelAndView渲染視圖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
java數(shù)據(jù)結(jié)構(gòu)之插入排序
這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)之插入排序的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11

