java实现将文件存储到数据库
前言
最近在工作中涉及到了一个将文件存储到mysql数据库中,实现文件存取操作的业务场景,本文将简单的对文件存储数据库的过程进行描述及实现
程序架构说明
采用的是springboot、mybatis实现对文件的转换与存储。
实现思路
1、从前端选择获取到需要上传的文件
2、文件在Controller控制层将文件的类型和文件名称进行分割
3、将文件转换为base64,然后在转换为String,作为大文本存入数据库
代码实现
这里只贴出部分代码,代码的各个层都可以通过工具自动生成,文件上传存储后,同样的操作可以将文件从数据库中取出,然后在逆向转换回去即可,转换过程中在从数据库中取出文件名和文件后缀拼接,这里不再贴出代码,如果有刚入门的朋友不懂的话可以私聊。
1.controller层主要代码
Template 实体类比较简单就不贴出代码了,根据需要自行编写即可
@PostMapping("/post")
//多个参数的传递
public int insertData(@RequestParam(value = "file") MultipartFile file,
@RequestParam(value = "name") String name) {
Template template = new Template();
//日期设置
Date date = new Date();
Timestamp timeStamp = new Timestamp(date.getTime());
//文件处理
if (file.isEmpty()) {
log.info("上传失败,请选择文件");
}
String originalFilename = file.getOriginalFilename();
//如果用“.”作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
String[] split = originalFilename.split("\\.");
String fileName = split[0];
String fileSuffix = split[1];
System.out.println("文件大小:" + file.getSize() + "文件名称:" + fileName + "文件后缀:" + fileSuffix);
byte[] bytesByFile = getBytesByFile(file);
//测试文件读取并写入到指定位置
//转换文件为String
Base64.Encoder base64 = Base64.getEncoder();
String s = base64.encodeToString(bytesByFile);
//参数设置
template.setTemplateId("abc1235");
template.setDeleted(0);
template.setUsed(0);
//获取postman中body 传入的值
template.setName(name);
template.setApplicant("董xx");
template.setApprovelStatus(0);
template.setVersion("v1.0");
template.setCreateTime(timeStamp);
template.setTemplateData(s);
Template insert = templateService.insert(template);
System.out.println(insert);
return 1;
}
2.Service层
/**
* 新增数据
*
* @param template 实例对象
* @return 实例对象
*/
@Override
public Template insert(Template template) {
this.templateDao.insert(template);
return template;
}
3.Dao层
/**
* 新增数据---更新用
*
* @param template 实例对象
* @return 影响行数
*/
int insert(Template template);
4.Mapper映射文件
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into fileupload.template(template_id, deleted, used, name, applicant, approver, approvel_status, approval_remark, delete_remark, upload_remark, refuse_reason, version, create_time, last_update_time, template_data)
values (#{templateId}, #{deleted}, #{used}, #{name}, #{applicant}, #{approver}, #{approvelStatus}, #{approvalRemark}, #{deleteRemark}, #{uploadRemark}, #{refuseReason}, #{version}, #{createTime}, #{lastUpdateTime}, #{templateData})
</insert>