SpringMVC 通过commons-fileupload实现文件上传功能

yizhihongxing

SpringMVC 通过commons-fileupload实现文件上传功能

SpringMVC是Java Web开发中广泛使用的MVC框架,而文件上传是Web开发中频繁使用的功能之一。通过常用的文件上传组件commons-fileupload,可以方便地实现SpringMVC的文件上传功能。

添加commons-fileupload依赖

首先需要在项目的pom.xml文件中添加commons-fileupload依赖:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

编写上传文件的HTML表单

编写上传文件的HTML表单,如下所示:

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

其中,enctype属性需要设置为multipart/form-data,这是因为在文件上传过程中需要传输二进制文件内容,而enctype属性可以指定表单以二进制格式提交。

编写SpringMVC Controller

编写SpringMVC的Controller,上传文件的过程在Controller中完成。下面给出一个简单的Controller代码示例。

@Controller
public class FileUploadController {

    @PostMapping("/uploadFile")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            // 如果文件为空,返回错误信息
            return "文件为空";
        }

        try {
            // 获取上传文件的字节流
            byte[] bytes = file.getBytes();

            // 上传文件处理逻辑,这里略去

            // 处理完毕,返回成功信息
            return "上传成功";
        } catch (IOException e) {
            // 发生异常,返回错误信息
            return "上传失败:" + e.getMessage();
        }
    }
}

以上代码中,@PostMapping注解用于指定上传文件的API路径,@RequestParam注解用于获取文件流。getBytes()方法可以获取上传文件的字节流,即文件内容。

在实际应用中,还需要对上传文件进行一些检查和处理,例如检查文件大小和类型,以及将文件保存到服务器本地。这里不加赘述,感兴趣的读者可以自行查阅文档。下面是一个完整的上传文件的Controller代码示例。

@Controller
public class FileUploadController {

    @Autowired
    private Environment env;

    @PostMapping("/uploadFile")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "文件为空";
        }

        try {
            String uploadPath = env.getProperty("upload.path");

            // 判断上传文件大小是否超过限制
            long fileSizeLimit = 1024 * 1024 * 10; // 10 MB
            if (file.getSize() > fileSizeLimit) {
                return "上传失败:文件大小超出限制";
            }

            // 判断上传文件类型是否合法
            String fileType = file.getContentType();
            List<String> allowedTypes = Arrays.asList("image/jpeg", "image/png", "image/gif");
            if (!allowedTypes.contains(fileType)) {
                return "上传失败:文件类型不合法";
            }

            // 将上传文件保存到服务器本地
            String originalFilename = file.getOriginalFilename();
            String extension = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
            String newFilename = UUID.randomUUID().toString() + "." + extension;
            Path filePath = Paths.get(uploadPath + newFilename);
            Files.write(filePath, file.getBytes());

            // 上传文件处理逻辑

            return "上传成功";
        } catch (IOException e) {
            return "上传失败:" + e.getMessage();
        }
    }
}

这里添加了文件大小和类型的检查,以及将上传文件存储到服务器本地的逻辑。

测试文件上传功能

最后在浏览器中访问上传文件的HTML表单,选择一个文件并提交,可以看到后台接收到请求并返回相应结果。上传的文件会被保存到服务器指定的路径。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC 通过commons-fileupload实现文件上传功能 - Python技术站

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

相关文章

  • Java Json字符串的双引号(“”)括号如何去掉

    想要去掉Java Json字符串中的双引号(“”)括号,需要使用Java中的字符串替换函数。以下是具体步骤: 获取Json字符串 要去掉Json字符串中的双引号(“”)括号,首先需要先获取Json字符串。可以使用Java中的字符串变量或从外部文件中读取文件内容等方法获取Json字符串。 用replaceAll()函数去掉双引号和括号 在Java中,使用rep…

    Java 2023年5月26日
    00
  • idea中方法、注释、导入类折叠或是展开的设置方法

    请参考以下攻略。 Idea中方法折叠或展开的设置方法 在Idea中,我们可以设置代码中的方法是否折叠或展开,方便代码的阅读。具体操作如下: 打开Idea设置界面,在搜索框中输入”折叠”关键字,选择”Editor -> General -> Code Folding”。 在Code Folding选项卡中,勾选要折叠的方法类型,比如”Methods…

    Java 2023年5月20日
    00
  • Elasticsearch文档索引基本操作增删改查示例

    下面是关于“Elasticsearch文档索引基本操作增删改查示例”的完整攻略: 背景简介 Elasticsearch是一个基于Lucene的搜索引擎,该引擎被用于全文搜索、结构化搜索、分析和存储数据。在Elasticsearch中,文档操作通常包括以下内容:文档的增加、删除、修改和查询。 文档索引操作 创建索引 在Elasticsearch中,要创建一个索…

    Java 2023年5月26日
    00
  • Spring Security全新版本使用方式

    下面是“Spring Security全新版本使用方式”的完整攻略。 一、什么是Spring Security? Spring Security是一个开源的安全框架,为Spring应用提供了一组安全服务,用于Web应用程序和服务保护。它提供了身份验证和授权,防止攻击,保护数据等一系列安全功能。因此Spring Security成为了Java领域中常用的安全框…

    Java 2023年6月3日
    00
  • Java这个名字的来历与优势

    Java是一种流行的编程语言,自1995年以来就一直被广泛采用。它的名字“Java”是由它的创造者詹姆斯·高斯林(James Gosling)与他的团队考虑出来的。Java这个名字的来历与优势的攻略可以分为以下几个方面: Java这个名字的来历 Java最初被命名为Oak。然而,后来由于已有一种名为Oak的编程语言,所以詹姆斯·高斯林和他的团队转而寻找新的名…

    Java 2023年5月24日
    00
  • Hibernate实现悲观锁和乐观锁代码介绍

    关于Hibernate实现悲观锁和乐观锁的代码介绍,我们可以分别针对不同的锁机制进行讲解。 一、悲观锁 悲观锁机制在操作数据的时候会先将数据锁定,避免其他线程对该数据的访问和修改。Hibernate提供了两种方式实现悲观锁:使用数据库相关功能实现和使用Hibernate API实现。 1.使用数据库相关功能实现悲观锁 需要在sql语句中使用 for upda…

    Java 2023年5月20日
    00
  • 利用SpringMVC过滤器解决vue跨域请求的问题

    利用 SpringMVC 过滤器解决 Vue 跨域请求的问题 在 Vue 开发中,我们经常会遇到跨域请求的问题。为了解决这个问题,我们可以使用 SpringMVC 过滤器来实现。本文将详细讲解如何利用 SpringMVC 过滤器解决 Vue 跨域请求的问题,并提供两个示例说明。 解决跨域请求的问题 在 Vue 开发中,我们经常会遇到跨域请求的问题。这是因为浏…

    Java 2023年5月18日
    00
  • Java之进程和线程的区别

    Java之进程和线程的区别 在Java中,进程和线程是很重要的概念。现在我们将详细讲解它们的区别。 什么是进程? 进程是指在内存中运行的程序的实例。每个进程都有自己的内存空间和系统资源,包括CPU时间、文件句柄等。每个进程都是独立的,它们不能直接互相访问对方的内存空间和系统资源。 Java中可以通过Process类实现对进程的操作。例如,可以使用Proces…

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