文件存储到MySql数据库

项目需要把文件以二进制的形式存储到数据库中

 

建立数据表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `document` longblob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4

 

相关实体类

package tech.szst.online.domain.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;

import java.util.Date;

public class User {

    private int id;

    @JsonIgnore
    private String pwd;

    private String name;

    private String headImg;

    private String phone;

    @JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss",timezone ="GMT+8")
    private Date createTime;

    private String sfzh;

    public String getSfzh() {
        return sfzh;
    }

    public void setSfzh(String sfzh) {
        this.sfzh = sfzh;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getHeadImg() {
        return headImg;
    }

    public void setHeadImg(String headImg) {
        this.headImg = headImg;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", pwd='" + pwd + '\'' +
                ", name='" + name + '\'' +
                ", headImg='" + headImg + '\'' +
                ", phone='" + phone + '\'' +
                ", createTime=" + createTime +
                ", sfzh='" + sfzh + '\'' +
                '}';
    }
}

  

Controller

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/insert")
    public int insertUser(MultipartFile file) throws IOException {

        User user = new User();
        user.setName(file.getOriginalFilename());
        user.setDocument(file.getBytes());

        return userService.insert(user);

    }

    @GetMapping("/download")
    public void download(@RequestParam int id, HttpServletResponse response) throws UnsupportedEncodingException {

        // todo 判断文件是否存在

        User user = userService.selectOne(id);
        String fileName = user.getName();
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-disposition", "attachment; filename=" +URLEncoder.encode(fileName, "utf-8"));
        byte[] document = user.getDocument();

        try (InputStream inputStream = new ByteArrayInputStream(document);
             ServletOutputStream outputStream = response.getOutputStream()) {
            int len = 0;
            byte[] buf = new byte[1024];
            while ((len = inputStream.read(buf, 0, 1024)) != -1) {
                outputStream.write(buf, 0, len);
            }
            outputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  

UserService

public interface UserService {
    int insert(User user);


    byte[] findById(int id);

    User selectOne(int id);
}

  

UserServiceImpl

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public int insert(User user) {
        return userMapper.insert(user);
    }

    @Override
    public byte[] findById(int id) {

        byte[] document = userMapper.selectById(id).getDocument();

        return document;
    }

    @Override
    public User selectOne(int id) {


        User user = userMapper.selectOneById(id);


        return user;
    }


}

  

UserMapper

public interface UserMapper extends BaseMapper<User> {
    User selectOneById(int id);
}

  

 

posted @ 2022-07-27 09:13  铁锅炖猫  阅读(433)  评论(0)    收藏  举报