第二章:SpringBoot接口Http协议开发实战
02-7 Spring2.x 文件上传实战
简介:讲解HTML页面文件上传和后端处理实战
1、讲解springboot文件上传 MultipartFile file,源自SpringMVC
1)静态页面直接访问:localhost:8080/index.html
注意点:
如果想要直接访问html页面,则需要把html放在springboot默认加载的文件夹下面
2)MultipartFile 对象的transferTo方法,用于文件保存(效率和操作比原先用FileOutStream方便和高效)
访问路径 http://localhost:8080/images/39020dbb-9253-41b9-8ff9-403309ff3f19.jpeg
1.创建spring boot应用
选择File-New-Project。新建项目。



添加依赖信息。

2.创建静态页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传页面</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="/upload">
文件:<input type="file" name="upload_img">
姓名:<input type="text" name="upload_name">
<input type="submit" value="上传">
</form>
</body>
</html>
查看一下效果:

3.创建后端代码
在src/main/java下创建controller以及对结果进行封装。
首先在创建JsonData.java文件,用以封装结果。
package com.example.spring_demo3.domain;
import java.io.Serializable;
/**
* @author : codingchao
* @date : 2021-11-17 13:43
* @Description:
**/
public class JsonData implements Serializable {
//状态码:0表示成功 -1表示失败
private int code;
//描述信息
private String msg;
//数据
private Object data;
public JsonData(int code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
之后创建FileUploadController文件用以文件上传的后端代码。
package com.example.spring_demo3.controller;
import com.example.spring_demo3.domain.JsonData;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
/**
* @author : codingchao
* @date : 2021-11-17 13:46
* @Description:
**/
@Controller
public class FileUploadController {
//保存路径
private static final String savePath = "D:\\000\\spring_study\\spring_demo3\\src\\main\\resources\\static\\images\\";
@RequestMapping(value = "upload")
@ResponseBody
public JsonData upload(@RequestParam("upload_img")MultipartFile file, HttpServletRequest request){
//可补充
//file.isEmpty(); 判断图片是否为空
//file.getSize(); 图片大小进行判断
// 获取用户名
String name = request.getParameter("upload_name");
System.out.println("用户名:"+name);
//获取文件名
String fileName = file.getOriginalFilename();
System.out.println("上传的文件名为:"+fileName);
//获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
System.out.println("上传的后缀名为:"+suffixName);
//新文件的名称
fileName = UUID.randomUUID() + suffixName;
System.out.println("转换后的新文件名称:"+fileName);
File dest = new File(savePath+fileName);
try {
file.transferTo(dest);
//封装返回
return new JsonData(0,"文件上传成功",fileName);
} catch (IOException e) {
e.printStackTrace();
}
return new JsonData(-1,"文件上传失败",null);
}
}
结果展示


4.jar包文件运行web项目的文件上传和访问处理实战
简介:讲解SpingBoot2.x使用 java -jar运行方式的图片上传和访问处理
1、文件大小配置,启动类里面配置
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize("10240KB"); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize("1024000KB");
return factory.createMultipartConfig();
}
2、打包成jar包,需要增加maven依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如果没加相关依赖,执行maven打包,运行后会报错:no main manifest attribute, in XXX.jar
GUI:反编译工具,作用就是用于把class文件转换成java文件
3、文件上传和访问需要指定磁盘路径
application.properties中增加下面配置
1) web.images-path=/Users/jack/Desktop
2) spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/test/,file:${web.upload-path}
4、文件服务器:fastdfs,阿里云oss,nginx搭建一个简单的文件服务器
a.文件大小限制
这里我们先上传一个大小超过1MB的图片,看服务器是否 支持。


本次springboot设置上传文件大小的两种方式
第一种:启动类添加限制
package com.example.spring_demo3;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.util.unit.DataSize;
import javax.servlet.MultipartConfigElement;
@SpringBootApplication
public class SpringDemo3Application {
public static void main(String[] args) {
SpringApplication.run(SpringDemo3Application.class, args);
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize(DataSize.parse("10240KB")); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize(DataSize.parse("1024000KB"));
return factory.createMultipartConfig();
}
}
上传效果展示

第二种方法:properties修改
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=20MB

b.修改保存的文件地址以及访问地址
在application.properties中修改配置文件
web.upload-path=D:\\
spring.web.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/
直接访问显示

c.打包成jar包运行

在target文件夹下得到生成的jar包文件


本文介绍如何使用SpringBoot实现文件上传功能,包括前端HTML页面设计、后端代码编写及文件大小配置等内容。

被折叠的 条评论
为什么被折叠?



