consumer端
添加依赖包
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
controller
@RequestMapping(value={"/Action/importData"},method={RequestMethod.POST},consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ReStatus importHBTree(@RequestPart(value = "uploadFile")MultipartFile file) throws Exception{
return handboardTreeService.importHBTree(file);
}
feignclient
@FeignClient(value = ServerName.HandBoard_Server,configuration = HandboardTreeService.MultipartSupportConfig.class)
public interface HandboardTreeService {
@Configuration
class MultipartSupportConfig {
@Bean
public Encoder feignFormEncoder() {
return new SpringFormEncoder();
}
}
@RequestMapping(value={"/Controller/importData"},method={RequestMethod.POST},consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
ReStatus importHBTree(@RequestPart(value = "uploadFile")MultipartFile file);
}
新增文件上传配置类
可以写为内部类,写到feign借口里边
@Configuration
class MultipartSupportConfig {
@Bean
public Encoder feignFormEncoder() {
return new SpringFormEncoder();
}
}
provider端
controller
@Slf4j
@RestController
@RequestMapping(value = "/Controller")
public class ImportDataController {
@RequestMapping(value = {"/importData"}, method = {RequestMethod.POST},consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void importTree(@RequestPart(value = "uploadFile")MultipartFile file) {
try {
String fileName = file.getOriginalFilename();
fileName = FileUtil.rename(fileName);
log.error("fileName:"+fileName);
assert fileName != null;
String filePath = FileUtil.getFilePath();
log.error("filePath:"+filePath);
String resPath = FileUtil.saveFile(file.getBytes(), filePath,fileName);
log.error("resPath:"+resPath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
service
FileUtil 如下
package com.test;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
@Slf4j
public class FileUtil {
/**
* 保存文件,并将文件路径(包括文件名)返回
*
* @param file
* @param filePath
* @param fileName
* @return
*/
public static String saveFile(byte[] file, String filePath, String fileName) {
log.error(filePath);
File targetFile = new File(filePath);
//文件路径是否已存在,不存在则创建
if (!targetFile.exists()) {
boolean mkdirs = targetFile.mkdirs();
log.error("mkdirs:" + mkdirs);
}
try (FileOutputStream fileOutputStream = new FileOutputStream(filePath + fileName)) {
FileChannel fileChannel = fileOutputStream.getChannel();
ByteBuffer buf = ByteBuffer.wrap(file);
while (fileChannel.write(buf) != 0) {
}
} catch (Exception e) {
e.printStackTrace();
}
return filePath + fileName;
}
/**
* 重命名导入的文件为(-时间毫秒数
*
* @param fileName
* @return
*/
public static String rename(String fileName) {
return fileName.substring(0, fileName.lastIndexOf(".")) + "-" + System.currentTimeMillis() + fileName.substring(fileName.lastIndexOf("."));
}
/**
* 获取导入文件的存储路径
*
* @return
*/
public static String getFilePath() {
return "d:" + File.separator + "importtemp" + File.separator;
}
}