请示例一个springboot项目中的java方法,主要用于从前端上传图片或者视频后,存储到数据库(保存到其他路径,只存图片的名称类型和地址))和从数据库读取图片或者视频信息并传给前端展示
时间: 2024-02-05 08:13:02 浏览: 151
基于java的图片上传以及显示
4星 · 用户满意度95%
好的,以下是一个示例代码,用于将前端上传的图片或视频保存到数据库中,并从数据库中读取图片或视频信息并传递给前端展示:
```java
@RestController
@RequestMapping("/media")
public class MediaController {
@Autowired
private MediaRepository mediaRepository;
@PostMapping("/upload")
public ResponseEntity<?> uploadMedia(@RequestParam("file") MultipartFile file) {
try {
// 获取上传文件的原始名称和类型
String originalName = file.getOriginalFilename();
String contentType = file.getContentType();
// 将文件保存到本地磁盘
String filePath = "D:/uploads/" + originalName;
File destFile = new File(filePath);
file.transferTo(destFile);
// 将文件信息保存到数据库
Media media = new Media(originalName, contentType, filePath);
mediaRepository.save(media);
return ResponseEntity.ok().build();
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
@GetMapping("/download/{id}")
public ResponseEntity<?> downloadMedia(@PathVariable("id") Long id) {
Optional<Media> mediaOptional = mediaRepository.findById(id);
if (!mediaOptional.isPresent()) {
return ResponseEntity.notFound().build();
}
Media media = mediaOptional.get();
try {
// 从本地磁盘读取文件
File file = new File(media.getFilePath());
// 将文件读取到字节数组中
byte[] bytes = Files.readAllBytes(file.toPath());
// 构建响应头,设置文件类型以及文件名
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType(media.getContentType()));
headers.setContentDisposition(ContentDisposition.builder("attachment")
.filename(media.getOriginalName()).build());
// 返回字节数组和响应头
return ResponseEntity.ok().headers(headers).body(bytes);
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
}
```
在上面的代码中,我们使用了Spring Boot的MultipartFile类来处理前端上传的文件,将文件保存到本地磁盘,并将文件信息保存到数据库中。在下载文件时,我们从数据库中读取文件信息,并通过字节数组和响应头来构建HTTP响应,将文件传递给前端展示。
阅读全文