fileUploadAndDownload
Spring完成文件的存储和下载 文件的存储 - 使用数据库存储文件本体 - 使用数据库存储文件的位置,文件存储在文件系统上 使用数据库直接存储文件,使用LONGBLOB类型保存文件的Byte数据 文件的接收 前端使用form上传数据 ContentType : multipart/form-data 使用 @RequestPart 注解接收文件 文件的下载 - 文件存储于数据库 使用Jdbc获取文件的LONGBLO…
Spring完成文件的存储和下载
文件的存储
- 使用数据库存储文件本体
- 使用数据库存储文件的位置,文件存储在文件系统上
使用数据库直接存储文件,使用LONGBLOB类型保存文件的Byte数据
文件的接收
前端使用form上传数据
ContentType : multipart/form-data 使用 @RequestPart 注解接收文件
@PostMapping("/upload")
public ResponseEntity<Object> uploadFile(@RequestPart MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
fileName = fileName.substring(0, fileName.lastIndexOf("."));
fileMapper.uploadFile(fileName, suffix, file.getBytes());
return new ResponseEntity(HttpStatusCode.valueOf(200));
}
文件的下载
- 文件存储于数据库
使用Jdbc获取文件的LONGBLOB,在Java中使用byte[]数组接收数据
@GetMapping("/download/{filename}")
public void downloadFile(@PathVariable() String filename, HttpServletResponse response) throws IOException {
filename = filename.substring(0, filename.lastIndexOf(".") == -1 ? filename.length() : filename.lastIndexOf("."));
File file = jdbcTemplate.queryForObject("SELECT * FROM FileStorage WHERE file_name = ?", new Object[]{filename},
(resultSet, rowNum) -> {
File tfile = new File();
tfile.setFileId(resultSet.getInt("file_id"));
tfile.setFileName(resultSet.getString("file_name"));
tfile.setFileType(resultSet.getString("file_type"));
tfile.setFileData(resultSet.getBytes("file_data"));
return tfile;
}
);
byte[] fileData = file.getFileData();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"file"+file.getFileType()+"\"");
if(fileData != null){
ServletOutputStream stream = response.getOutputStream();
stream.write(fileData);
stream.flush();
}
}