文件存储到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);
}
浙公网安备 33010602011771号