利用 Spring Boot 实现图片上传

打印 上一主题 下一主题

主题 1070|帖子 1070|积分 3214

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
一、前言? ? ? ??
二、项目预备
2.1、创建SpringBoot项目
2.2、项目结构
2.3、配置文件
2.4、创建控制器
2.5、创建服务
2.6创建前端界面
2.7、静态资源
三、运行项目
四、测试上传功能
总结

一、前言

在今世 web 开发中,图片上传功能是一个常见的需求。本文将先容怎样利用 Spring Boot 实现一个简朴的图片上传功能,包罗文件的上传、存储和展示。我们将利用 Spring Boot 的文件上传功能,并团结 Thymeleaf 作为模板引擎来构建前端界面。
二、项目预备

2.1、创建SpringBoot项目

可以利用 Spring Initializr 创建一个新的 Spring Boot 项目。选择以下依靠:


  • Spring Web
  • Thymeleaf
  • Spring Boot DevTools(可选,方便开发时热摆设)
2.2、项目结构

springboot-image-upload

├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── imageupload
│ │ │ ├── ImageUploadApplication.java
│ │ │ ├── controller
│ │ │ │ └── ImageUploadController.java
│ │ │ └── service
│ │ │ └── ImageUploadService.java
│ │ └── resources
│ │ ├── static
│ │ ├── templates
│ │ │ └── upload.html
│ │ └── application.properties
└── pom.xml
2.3、配置文件

在 src/main/resources/application.properties 中,添加如下配置:
  1. # 文件上传的最大大小
  2. spring.servlet.multipart.max-file-size=2MB
  3. spring.servlet.multipart.max-request-size=2MB
  4. # 上传文件的存储路径
  5. file.upload-dir=uploads
复制代码
2.4、创建控制器

在 com.example.imageupload.controller 包下,创建 ImageUploadController 类。
  1. package com.example.imageupload.controller;
  2. import com.example.imageupload.service.ImageUploadService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.Model;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.PostMapping;
  8. import org.springframework.web.bind.annotation.RequestParam;
  9. import org.springframework.web.multipart.MultipartFile;
  10. import java.util.List;
  11. @Controller
  12. public class ImageUploadController {
  13.     @Autowired
  14.     private ImageUploadService imageUploadService;
  15.     @GetMapping("/")
  16.     public String uploadPage(Model model) {
  17.         List<String> uploadedImages = imageUploadService.getUploadedImages();
  18.         model.addAttribute("uploadedImages", uploadedImages);
  19.         return "upload";
  20.     }
  21.     @PostMapping("/upload")
  22.     public String uploadImage(@RequestParam("file") MultipartFile file, Model model) {
  23.         if (file.isEmpty()) {
  24.             model.addAttribute("message", "请选择一个文件进行上传");
  25.             return "upload";
  26.         }
  27.         // 保存文件
  28.         String imagePath = imageUploadService.uploadImage(file);
  29.         model.addAttribute("message", "文件上传成功: " + imagePath);
  30.         model.addAttribute("uploadedImages", imageUploadService.getUploadedImages());
  31.         return "upload";
  32.     }
  33. }
复制代码
2.5、创建服务

在 com.example.imageupload.service 包下,创建 ImageUploadService 类。
  1. package com.example.imageupload.service;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.stereotype.Service;
  4. import org.springframework.web.multipart.MultipartFile;
  5. import java.io.File;
  6. import java.io.IOException;
  7. import java.nio.file.Files;
  8. import java.nio.file.Path;
  9. import java.nio.file.Paths;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. @Service
  13. public class ImageUploadService {
  14.     @Value("${file.upload-dir}")
  15.     private String uploadDir;
  16.     public String uploadImage(MultipartFile file) {
  17.         try {
  18.             // 确保目录存在
  19.             File dir = new File(uploadDir);
  20.             if (!dir.exists()) {
  21.                 dir.mkdirs();
  22.             }
  23.             // 文件保存路径
  24.             Path filePath = Paths.get(uploadDir, file.getOriginalFilename());
  25.             file.transferTo(filePath);
  26.             return file.getOriginalFilename();
  27.         } catch (IOException e) {
  28.             e.printStackTrace();
  29.             return null;
  30.         }
  31.     }
  32.     public List<String> getUploadedImages() {
  33.         List<String> images = new ArrayList<>();
  34.         File dir = new File(uploadDir);
  35.         if (dir.exists()) {
  36.             for (File file : dir.listFiles()) {
  37.                 images.add(file.getName());
  38.             }
  39.         }
  40.         return images;
  41.     }
  42. }
复制代码
2.6创建前端界面

在 src/main/resources/templates 目录下,创建 upload.html 文件。
  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4.     <title>图片上传</title>
  5.     <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  6. </head>
  7. <body>
  8. <div class="container">
  9.     <h1 class="mt-5">图片上传</h1>
  10.     <form action="/upload" method="post" enctype="multipart/form-data">
  11.         <div class="form-group">
  12.             <label for="file">选择文件</label>
  13.             <input type="file" class="form-control-file" id="file" name="file" required>
  14.         </div>
  15.         <button type="submit" class="btn btn-primary">上传</button>
  16.     </form>
  17.     <div th:if="${message}" class="alert alert-info mt-3">
  18.         <p th:text="${message}"></p>
  19.     </div>
  20.     <h2 class="mt-5">已上传的图片</h2>
  21.     <div class="row">
  22.         <div class="col-md-3" th:each="image : ${uploadedImages}">
  23.             <div class="card mb-4">
  24.                 <img th:src="@{/uploads/{image}(image=image)}" class="card-img-top" alt="图片">
  25.                 <div class="card-body">
  26.                     <h5 class="card-title" th:text="${image}"></h5>
  27.                 </div>
  28.             </div>
  29.         </div>
  30.     </div>
  31. </div>
  32. </body>
  33. </html>
复制代码
2.7、静态资源

在 src/main/resources/static 目录下,创建 uploads 文件夹,确保上传的图片能够被访问。
三、运行项目

确保项目依靠已经精确引入,并在 IDE 中启动项目。打开浏览器,访http://localhost:8080/,你应该可以看到上传界面。
四、测试上传功能


  • 选择一个图片文件进行上传,点击“上传”按钮。
  • 上传成功后,页面会显示上传的消息和已上传的图片列表。
总结

通过上述步调,我们成功实现了一个简朴的图片上传功能。你可以根据自己的需求进一步扩展功能,比如增加文件范例和巨细的限制、支持多文件上传、实现文件的删除功能等。盼望这个示例能帮助你在项目中实现图片上传功能!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表