Spring Boot简单实现文件上传功能

下面是关于“Spring Boot简单实现文件上传功能”的完整攻略。

准备工作

  1. 需要在pom.xml中添加如下依赖:

xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>

  1. 在application.properties中添加如下配置:

properties
# 上传文件大小限制
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
# 临时文件路径
#spring.servlet.multipart.location=/tmp

实现代码

  1. 首先在Controller中添加如下代码,来实现文件上传功能:

```java
@RestController
@RequestMapping("/file")
public class FileController {

   @PostMapping("/upload")
   public String upload(@RequestParam("file") MultipartFile file) throws IOException {
       if (!file.isEmpty()) {
           // 获取文件名
           String fileName = file.getOriginalFilename();
           // 获取文件后缀
           String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
           // 判断上传文件类型是否为指定类型
           if (!"jpg".equals(suffix) && !"png".equals(suffix) && !"jpeg".equals(suffix)) {
               return "上传失败,文件类型不合法!";
           }
           // 获取文件保存路径
           String filePath = System.getProperty("user.dir") + "/src/main/resources/static/image/";
           File dest = new File(filePath + fileName);
           // 判断文件父目录是否存在
           if (!dest.getParentFile().exists()) {
               dest.getParentFile().mkdirs();
           }
           try {
               // 保存文件
               file.transferTo(dest);
               System.out.println("上传成功");
               return "上传成功";
           } catch (IOException e) {
               e.printStackTrace();
               return "上传失败";
           }
       } else {
           return "上传失败,文件为空!";
       }
   }

}
```

  1. 为了更加友好的提示信息,可以在前端添加如下代码:

```html

```

然后在Controller中添加如下代码:

```java
@GetMapping("/uploadPage")
public String uploadPage() {
return "upload";
}

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file, Model model) throws IOException {
if (!file.isEmpty()) {
// 获取文件名
String fileName = file.getOriginalFilename();
// 获取文件后缀
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
// 判断上传文件类型是否为指定类型
if (!"jpg".equals(suffix) && !"png".equals(suffix) && !"jpeg".equals(suffix)) {
model.addAttribute("message", "上传失败,文件类型不合法!");
return "upload";
}
// 获取文件保存路径
String filePath = System.getProperty("user.dir") + "/src/main/resources/static/image/";
File dest = new File(filePath + fileName);
// 判断文件父目录是否存在
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
// 保存文件
file.transferTo(dest);
System.out.println("上传成功");
model.addAttribute("message", "上传成功!");
return "upload";
} catch (IOException e) {
e.printStackTrace();
model.addAttribute("message", "上传失败!");
return "upload";
}
} else {
model.addAttribute("message", "上传失败,文件为空!");
return "upload";
}
}
```

示例说明

示例1:上传所需文件

上传所需文件的示例代码如下:

<form action="/file/upload" method="post" enctype="multipart/form-data">
    <table>
        <tr>
            <td><input type="file" name="file"></td>
        </tr>
        <tr>
            <td><button type="submit">上传文件</button></td>
        </tr>
    </table>
</form>

<p th:text="${message}"></p>

其中,action属性指向了上传文件的接口,enctype属性设置了form表单的编码类型为multipart/form-data

示例2:判断文件类型

在上传文件的Controller中,添加了如下判断文件类型的代码:

// 获取文件后缀
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
// 判断上传文件类型是否为指定类型
if (!"jpg".equals(suffix) && !"png".equals(suffix) && !"jpeg".equals(suffix)) {
    model.addAttribute("message", "上传失败,文件类型不合法!");
    return "upload";
}

其中,suffix变量表示获取上传文件的后缀名,判断上传文件类型是否为指定类型(此处只允许上传.jpg、.png、.jpeg类型的文件)。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot简单实现文件上传功能 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月16日

相关文章

  • Android 仿微信小程序入口动画

    下面是关于“Android 仿微信小程序入口动画”的完整攻略: 背景介绍 最近微信小程序入口动画特别火,很多开发者都想学习实现这个动画效果,本文将介绍如何使用Android实现这个动画效果。 实现步骤 首先,我们需要在布局文件中添加一个LinearLayout,这个LinearLayout是用来放置小程序入口动画的。 xml <LinearLayout…

    Java 2023年5月23日
    00
  • Java使用split截取字符串过程解析

    Java使用split截取字符串过程解析 简介 在Java开发中,操作字符串是个基础的技能,而split()方法是经常使用的一个方法。本篇文章主要介绍split()方法的使用方式和内部实现原理。 split()方法原理 split()方法是Java中的字符串分割函数,它的签名如下所示: public String[] split(String regex) …

    Java 2023年5月27日
    00
  • jQuery实现在列表的首行添加数据

    下面是详细的jQuery实现在列表的首行添加数据的完整攻略。 过程概述 实现在列表的首行添加数据,可以通过以下步骤完成: 使用jQuery选择器选中列表的第一个元素; 创建需要添加的数据的HTML代码; 使用jQuery的插入方法在第一个元素前插入新增数据。 代码实现 示例 1 在列表首行插入一条文本数据: // 获取列表的第一个元素 var $firstI…

    Java 2023年6月16日
    00
  • Java实现向Word文档添加文档属性

    下面我将详细讲解如何使用Java向Word文档添加文档属性。 1. Word文档属性 在Word文档中,文档属性是描述文档特性的元数据,例如作者、标题、主题等等。它们可以加强搜索效果、提取有用信息和跟踪文档版本。文档属性通常包含在文档内部,并不会在文档中显示出来,但可以通过Word菜单中的文件属性信息查看。 2. Java实现方法 Java可以通过POI库(…

    Java 2023年5月19日
    00
  • 解决RestTemplate 的getForEntity调用接口乱码的问题

    RestTemplate是Spring框架提供的用于进行HTTP请求的工具,但是在使用getForEntity方法调用接口时,会出现中文乱码的问题。 解决这个问题可以分为两个步骤: 设置RestTemplate的编码方式 在使用RestTemplate的时候,需要设置它的编码方式。可以在创建RestTemplate对象时,传入一个StringHttpMess…

    Java 2023年5月20日
    00
  • Sprint Boot @ConditionalOnProperty使用方法详解

    @ConditionalOnProperty是Spring Boot中的一个注解,它用于根据配置属性的值来决定是否启用或禁用某个组件。在使用Spring Boot开发应用程序时,@ConditionalOnProperty是非常有用的。本文将详细介绍@ConditionalOnProperty的作用和使用方法,并提供两个示例说明。 @ConditionalO…

    Java 2023年5月5日
    00
  • JSP中的源代码泄漏问题

    JSP(Java Server Pages)是一种跨平台的Web技术,它允许Java代码被嵌入到HTML页面中,以此来动态生成Web页面。但是,如果JSP页面中存在源代码泄漏的问题,攻击者可以利用这个漏洞来获取应用程序的源代码,从而非法获取系统信息,甚至进一步攻击应用程序。因此,JSP中的源代码泄漏问题是一项需要格外重视的安全问题。下面是详细讲解JSP中的源…

    Java 2023年6月15日
    00
  • Java线程死锁实例及解决方法

    Java线程死锁是指两个或多个线程被永久地阻塞,它们在等待其他线程释放它们所需要的资源。这是一个非常常见的问题,在并发编程中,如果不了解和处理好线程死锁,则会引发严重的程序堵塞甚至崩溃。 Java线程死锁的实例 示例1 下面是一个简单的死锁案例。假设有两个线程:A和B,他们都需要获取两个锁才能继续执行,两个锁分别是LockA和LockB,代码如下: publ…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部