java实现将图片,Word等文件存储到数据库

前言

最近在工作中涉及到了一个将文件存储到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>
  • 2
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值