Spring Boot上传文件功能的开发

Spring Boot使用Servlet 3的API javax.servlet.http.Part来支持文件上传。Spring Boot在类MultipartAutoConfiguration中定义文件上传组件的自动配置,这个自动配置在使用Spring MVC框架时默认开启。

3.3.1  POM文件配置

在开启Web模块时,文件上传功能自动开启,所以pom.xml中只需配置spring-boot-starter- web,配置代码如下:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

在控制台上,可以通过添加“--debug”启动参数来查看文件上传组件是否已开启。开启时,项目控制台的输出如图3.8所示。

图3.8  控制台输出自动配置开启信息

3.3.2  参数设置

在Spring Boot的MultipartProperties类中定义了6个关于文件上传的参数,具体说明如表3.1所示。

表3.1  文件上传相关参数

名    称

默  认  值

描    述

spring.servlet.multipart.enabled

true

是否开启分段上传,默认为true

spring.servlet.multipart.file-size-threshold

0B

文件写入磁盘的阈值

spring.servlet.multipart.location

上传文件的临时目录

spring.servlet.multipart.max-file-size

1MB

上传文件最大大小

spring.servlet.multipart.max-request-size

10MB

文件请求最大大小

spring.servlet.multipart.resolve-lazily

false

是否在文件或参数访问时延迟解析多部分请求

在项目中,可以根据需要在application.yaml中进行配置。在这里,我们使用默认配置。

3.3.3  编写前端页面

为了方便访问,在src/main/resources/static目录下创建HTML文件,文件名为file_upload.html。

在文件中添加一个form表单,用于提交文件,并设置method、action和enctype属性。在该表单内添加两个input,用来选择文件和提交按钮,具体代码如下:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>文件上传</title>

</head>

<body>

<form method="POST" action="/upload" enctype="multipart/form-data">

<input type="file" name="file" />

<br/>

<input type="submit" value="提交" />

</form>

</body>

</html>

这里的method指定了请求类型为POST,请求URL为/upload,下面Controller中的代码要与这些设置相匹配。

3.3.4  编写处理上传请求的Controller类

在HTML页面提交会触发请求/upload,因此在服务端需要提供一个处理/upload提交文件的请求,并且将接收到的文件保存到服务器上。在这里将文件保存到D:\files目录下,并且将这个地址作为配置项写到配置文件中。最后,在处理完请求后,请求成功的提示返回给浏览器。具体操作如下:

(1)在src/main/java/com/example/helloworld/controller目录下新创建一个类,命名为FileUploadController.java,代码如下:

package com.example.helloworld.controller;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

@Controller

public class FileUploadController {

@Value("${save.path}")

String savePath;

@ResponseBody

@PostMapping("/upload")

public String upload(@RequestParam("file") MultipartFile file) throws Exception{

String fileSaveName = System.currentTimeMillis()+"-"+file.getOriginalFilename();

Path saveTo = Paths.get(savePath,fileSaveName);

Files.write(saveTo, file.getBytes());

return fileSaveName+",上传成功!";

}

}

(2)在application.yaml中添加save.path的配置,代码如下:

save:

path: D:\files

3.3.5  从浏览器上传文件

(1)运行项目,在浏览器中访问http://127.0.0.1:8080/file_upload.html,效果如图3.9所示。

(2)单击“选择文件”按钮,在弹出的窗口中选择文件。这里已经在桌面的file_upload文件夹中放置了一个Spring标识的图片文件,名为spring_logo.png,选中这个文件,如图3.10所示。

                                

图3.9  文件上传页面                                                                   图3.10  选择文件系统中的图片

单击打开,页面中显示已选择spring_logo.png,如图3.11所示。

(3)单击“提交”按钮,浏览器页面自动刷新,显示“...-spring_logo.png,上传成功!”的字样,如图3.12所示。

这时已经提交成功,并且文件spring_logo.png已经保存到D:\files目录下。打开此目录,可以看到成功保存的文件,如图3.13所示。

     

图3.11  选中图片后的效果                                               图3.12  上传成功,并显示文件名           图3.13  查看保存的文件

若多次提交,则这个目录下会保存多个前缀不同的-spring_logo.png文件。

本书节选自2022年1月出版的《Spring Boot从零开始学(视频教学版)》。

Spring Boot上传文件功能的开发的更多相关文章

  1. springboot(十七):使用Spring Boot上传文件

    上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例. 1.pom包配置 我们使用Spring Boot最新版本1.5.9. ...

  2. (转)Spring Boot(十七):使用 Spring Boot 上传文件

    http://www.ityouknow.com/springboot/2018/01/12/spring-boot-upload-file.html 上传文件是互联网中常常应用的场景之一,最典型的情 ...

  3. Spring Boot(十七):使用Spring Boot上传文件

    Spring Boot(十七):使用Spring Boot上传文件 环境:Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0 一.pom包配置 <parent> ...

  4. 使用Spring Boot上传文件

    原文:http://www.cnblogs.com/ityouknow/p/8298344.html 上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spri ...

  5. Spring Boot(十七):使用 Spring Boot 上传文件

      上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例. 1.pom 包配置 我们使用 Spring Boot 版本 ...

  6. Spring Boot上传文件(带进度条)

    Spring Boot 上传文件(带进度条)# 配置文件 spring: freemarker: template-loader-path: classpath:/static/ ##Spring B ...

  7. Spring Boot 上传文件 获取项目根路径 物理地址 resttemplate上传文件

    springboot部署之后无法获取项目目录的问题: 之前看到网上有提问在开发一个springboot的项目时,在项目部署的时候遇到一个问题:就是我将项目导出为jar包,然后用java -jar 运行 ...

  8. Spring Boot上传文件

    我们使用Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0. <parent> <groupId>org.springframework.boot& ...

  9. spring Boot 上传文件,10天后,不能上传的bug

    起因 公司研发人员 部署服务在阿里云 ecs 服务器; 上传文件过1周左右文件自动丢失; 排查思路: (1).查询tomcat 启动日志出现如下信息: java.io.IOException: The ...

  10. spring boot上传文件错误The temporary upload location [/tmp/tomcat.5260880110861696164.8090/work/Tomcat/localhost/ROOT] is not valid

    参考了:https://www.jianshu.com/p/cfbbc0bb0b84 再次感谢,但还是有些调整 一.在zuul服务中加入两个配置参数(location: /data/apps/temp ...

随机推荐

  1. PostgreSQL 并行计算算法,参数,强制并行度设置

    一.优化器并行计算的并行度计算方法 1.总worker进程数 postgres=# show ; max_worker_processes ---------------------- 128 (1 ...

  2. 代码随想录-day2

    哈希表 基础知识 哈希表和链表都是属于基础数据结构的一种,都是必须掌握牢靠的知识. 哈希表是根据关键码的值而直接进行访问的数据结构. 简单来说就是使用数据得到的哈希值来作为哈希表的key用于获取数据. ...

  3. windows11 安装跳过互联网验证

    按住shift+F10   cmd 输入  OOBE\BYPASSNRO 电脑重启后 出现 跳过得按钮

  4. Android 7.0+模拟器Fiddler抓包详细教程 fiddler443问题解决办法

    https://blog.csdn.net/qq_43278826/article/details/124291040 [前言]         众所周知,假如设备是android 7.0+的系统同时 ...

  5. 计算机存储内部数据的原理,编程语言的发展史和分类,python解释器的下载和安装,计算机cmd窗口的使用,环境变量和解释器多版本共存方法

    计算机内部存储数据的原理 计算机内部只认识01二进制. 存储单位:0和1分别代表一个比特位(bit).8bit=1bytes(字节) 1024kb=1MB 1024MB=1GB 1024GB=1TB ...

  6. MySQL8.0 存储引擎(InnoDB )buffer pool的实现原理

      数据库为了高效读取和存储物理数据,通常都会采用缓存的方式来弥补磁盘IO与CPU运算速度差.InnoDB 作为一个具有高可靠性和高性能的通用存储引擎也不例外,Buffer Pool就是其用来在内存中 ...

  7. 面向对象程序设计第二次blog

    一.前言 第四次题目集总结-- 题量:较多 难度:较高 知识点: 获取输入字符串的特定字符类型 获取并储存.计算 循环.选择.字符串.数组的使用 继承 类的设计 总结:题目比较难,题量较少,需要用到正 ...

  8. 多个pie环形图 逆时针旋转

    效果图如下  代码如下 data = [ { name: "经济目的", value: 754, }, { name: "网络安全爱好者", value: 61 ...

  9. csp201503-2(数字排序)

    问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出. 输入格式 输入的第一行包含一个整数n,表示给定数字的个数. 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所 ...

  10. KU060板卡设计资料原理图第636篇:基于FMC的KU060高性能 PCIe 载板

    基于FMC的KU060高性能 PCIe 载板 一.板卡概述 板卡主控芯片采用Xilinx 公司的 Kintex UltraScale系列FPGA XCKU060-2FFVA1156.板载 2 组 64 ...