public interface TestService {
String uploadFileTest(MultipartFile zipFile);
}
---------------------------------------------------------------------
@Service
public class TestServiceImpl implements TestService {
private static final Logger logger = LoggerFactory.getLogger(TestServiceImpl.class);
@Override
public String uploadFileTest(MultipartFile zipFile) {
// 文件保存路径
String targetFilePath = "D:\\360_js";
// 获取上传文件的文件名
String fileName = zipFile.getOriginalFilename();
// 真正地进行文件保存
File targetFile = new File(targetFilePath + File.separator + fileName);
// 以下为日志 可要可不要,如果文件保存失败,1.检查路径是否正确 2.是否已经存在该文件 3.可能需要抛出IOException
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(targetFile);
IOUtils.copy(zipFile.getInputStream(), fileOutputStream);
// 日志
logger.info("------>>>>>>uploaded a file successfully!<<<<<<------");
} catch (IOException e) {
e.printStackTrace();
return "IO异常";
} finally {
try {
fileOutputStream.close();
} catch (IOException e) {
logger.error("", e);
}
}
return "success";
}
}
-----------------------------------------------------------------
@Autowired
private TestService testService;
@PostMapping("/upload")
public String uploadFileTest(@RequestParam("uploadFile") MultipartFile zipFile) {
return testService.uploadFileTest(zipFile);
}
后端接收文件 以及接收多个参数
将文件定义成一个类的属性,将参数也定义成类的属性,如此 接收参数 和文件
实体类 entity FileSaveReqVO.java
@ApiModelProperty(value = "上传的文件", required = true)
@NotNull(message = "上传文件不能为空")
private MultipartFile file;
@ApiModelProperty(value = "文件名称",hidden = true)
private String Name;
@ApiModelProperty(value = "文件地址", hidden = true)
private String Url;
---------------------------------------------------------
接口 interface
void save(FileSaveReqVO reqVO);
impl层
@Service
public class KettleTransFileServiceImpl implements IKettleTransFileService {
// 文件保存路径
private String path = "D:\\360_js";
// mapper层控制文件名称,文件地址保存在数据库
@Autowired
private FileMapper fileMapper;
@Override
public void save(FileSaveReqVO reqVO) {
try {
// 获取上传文件名称
String fileName = reqVO.getFile().getOriginalFilename();
// 真正地进行文件保存
File destFile = new File(kettleHomePath + File.separator + fileName);
reqVO.getFile().transferTo(destFile);
} catch (IOException e) {
throw WinExceptionUtil.winException(SchExceptionEnum.SAVE_KETTLE_FILE_ERROR, reqVO.getName());
}
// 将文件名称和地址保存在reqVO 便于保存到数据库
reqVO.setName(fileName);
reqVO.setUrl(path+ fileName);
fileMapper.save(reqVO);
}
}
controller层
@PostMapping("/save")
public String save(FileSaveReqVO reqVO) {
fileService.save(reqVO);
return "添加成功";
}
使用postman测试时,记得将类型改成multipart/form-data 文件参数file 需要其他参数可以自行设计
当然我们大多数是不将上传的文件封装在类里面,而是另起一个实体,一个文件 接口
只是接收的时候接收参数 和文件 ,例如
public void updateFile(Entity entity, MultipartFize file) {
......
}
如果不会这种方式的话,留言告诉我 我再更新