springboot中写出一个上传图片并返回路径到数据库中的接口
时间: 2024-03-15 10:46:19 浏览: 115
好的,下面是一个简单的Spring Boot接口,用于上传图片并将图片路径保存到数据库中。
1. 首先,我们需要在pom.xml中添加以下依赖,以支持文件上传:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
```
2. 然后,我们需要创建一个实体类,用于保存上传的图片信息。代码如下:
```java
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String path;
// getters and setters
}
```
3. 接着,我们需要创建一个数据访问接口,用于对图片实体进行CRUD操作。代码如下:
```java
import org.springframework.data.jpa.repository.JpaRepository;
public interface ImageRepository extends JpaRepository<Image, Long> {
}
```
4. 然后,我们需要创建一个文件上传控制器,用于处理上传文件的HTTP请求。代码如下:
```java
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.UUID;
@Controller
@RequestMapping("/image")
public class ImageController {
@Autowired
private ImageRepository imageRepository;
@GetMapping("/{id}")
public void getImage(@PathVariable Long id, HttpServletResponse response) throws IOException {
Image image = imageRepository.findById(id).orElse(null);
if (image != null) {
response.setContentType("image/jpeg");
InputStream inputStream = new FileInputStream(new File(image.getPath()));
IOUtils.copy(inputStream, response.getOutputStream());
}
}
@PostMapping("/upload")
@ResponseBody
public String uploadImage(@RequestParam("file") MultipartFile file) throws IOException {
if (!file.isEmpty()) {
String fileName = StringUtils.cleanPath(file.getOriginalFilename());
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if (fileExt.equals("jpg") || fileExt.equals("jpeg") || fileExt.equals("png")) {
String newFileName = UUID.randomUUID().toString() + "." + fileExt;
String filePath = "D:/images/" + newFileName;
File dest = new File(filePath);
file.transferTo(dest);
Image image = new Image();
image.setName(fileName);
image.setPath(filePath);
imageRepository.save(image);
return "/image/" + image.getId();
}
}
return null;
}
}
```
5. 最后,我们需要创建一个Thymeleaf模板,用于演示如何上传图片。代码如下:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上传图片</title>
</head>
<body>
<h1>上传图片</h1>
<form method="post" enctype="multipart/form-data" action="/image/upload">
<input type="file" name="file"/><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
```
现在,我们已经完成了一个简单的图片上传接口,可以将上传的图片保存到指定目录,并将图片路径保存到数据库中。可以通过访问"/image/upload"来上传图片。上传成功后,接口会返回图片访问路径,例如"/image/1"。可以通过访问该路径来查看上传的图片。
阅读全文