springboot文件上传mysql
时间: 2023-10-13 12:27:04 浏览: 34
要将文件上传到MySQL数据库,可以将文件转换为字节数组,然后将字节数组插入到数据库中。以下是一个基本的示例:
1. 添加依赖
首先,需要在 pom.xml 文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MySQL JDBC driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
```
2. 创建实体类
创建一个实体类来表示文件,包括文件名、字节数组等属性。
```java
@Entity
@Table(name = "file")
public class FileEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "file_name")
private String fileName;
@Lob
@Column(name = "file_data")
private byte[] fileData;
// getters and setters
}
```
3. 创建文件上传接口
创建一个 REST 接口,用于上传文件。在这个接口中,首先将文件转换为字节数组,然后将字节数组插入到数据库中。
```java
@RestController
public class FileUploadController {
@Autowired
private FileRepository fileRepository;
@PostMapping("/upload")
public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
byte[] fileData = file.getBytes();
FileEntity fileEntity = new FileEntity();
fileEntity.setFileName(fileName);
fileEntity.setFileData(fileData);
fileRepository.save(fileEntity);
return ResponseEntity.ok().build();
}
}
```
4. 创建文件下载接口
创建另一个 REST 接口,用于从数据库中下载文件。在这个接口中,首先根据文件名从数据库中查询文件,然后将字节数组转换为文件并返回。
```java
@RestController
public class FileDownloadController {
@Autowired
private FileRepository fileRepository;
@GetMapping("/download")
public ResponseEntity<?> downloadFile(@RequestParam("file_name") String fileName) throws IOException {
Optional<FileEntity> optionalFileEntity = fileRepository.findByFileName(fileName);
if (optionalFileEntity.isPresent()) {
FileEntity fileEntity = optionalFileEntity.get();
byte[] fileData = fileEntity.getFileData();
InputStream inputStream = new ByteArrayInputStream(fileData);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attachment; filename=" + fileName);
return ResponseEntity.ok()
.headers(headers)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(new InputStreamResource(inputStream));
} else {
return ResponseEntity.notFound().build();
}
}
}
```
5. 创建文件实体类的 JPA Repository
最后,创建一个 JPA Repository 接口,用于与数据库进行交互。
```java
@Repository
public interface FileRepository extends JpaRepository<FileEntity, Long> {
Optional<FileEntity> findByFileName(String fileName);
}
```
现在,可以上传和下载文件了。要上传文件,只需向 /upload 接口发送一个 POST 请求,并将文件作为表单数据发送。要从数据库中下载文件,只需向 /download 接口发送一个 GET 请求,并将文件名作为查询参数发送。