摘要: 在开发企业级应用项目业务模块期间,“上传文件/附件”的功能相信每个小伙伴都遇见过,甚至有的曾以代码实战过。本文Debug将带领各位小伙伴重新回温一下在Spring Web应用中如何实现文件的上传,其中提供了包括Java NIO在内的多种方式。
内容:在企业级应用项目的开发过程中,“上传文件/附件”这一功能相信很多小伙伴都实现过,当然啦,其实现方式也是迥异不同。接下来,Debug就给各位小伙伴展示一下在Java Web应用中如何实现文件的上传。
在介绍实战之前,我们先来创建一个数据库表appendix,用于记录存储每个业务对象上传上来的图片的详情,包括其所属的业务对象的注解、所属业务模块、图片名称、大小、存储的磁盘路径等等,其DDL如下所示:
CREATE TABLE `appendix` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`module_id` int(11) DEFAULT NULL COMMENT '所属模块记录主键id',
`module_code` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '所属模块编码',
`module_name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '所属模块名称',
`name` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '文件名称',
`size` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '文件大小',
`suffix` varchar(50) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '文件后缀名',
`file_url` varchar(500) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '文件访问的磁盘目录',
`is_active` tinyint(4) DEFAULT '1' COMMENT '是否有效(1=是;0=否)',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='附件(文件)上传记录';
一、接下来,我们先来介绍第一种方式吧,基于Java NIO的方式实现文件上传功能
1、首先,创建FileController,用于接收前端上传过来的文件以及其他业务信息,其源代码如下所示:
@RestController
@RequestMapping("file")
public class FileController extends AbstractController{
@Autowired
private IFileService fileService;
/**
* 为商品上传图片
* 上传文件-方式1:MultipartHttpServletRequest 接收前端参数
* @return
*/
@RequestMapping(value = "upload/v1",method = RequestMethod.POST)
public BaseResponse uploadV1(MultipartHttpServletRequest request){
BaseResponse response=new BaseResponse(StatusCode.Success);
Map<String,Object> resMap= Maps.newHashMap();
try {
String url=fileService.uploadFileV1(request);
resMap.put("fileUrl",url);
}catch (Exception e){
e.printStackTrace();
response=new BaseResponse(StatusCode.Fail.getCode(),e.getMessage());
}
response.setData(resMap);
return response;
}
}