大家好,又见面了,我是你们的朋友全栈君。
文件上传是企业开发中最常用的功能。本文主要介绍SpringBoot中使用表单上传时单文件上传和多文件上传的操作方式。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<scope>provided</scope>-->
</dependency>
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
servlet:
multipart:
max-file-size: 10MB
max-request-size: 100MB
分别配置jsp的前后缀、上传文件总的最大值和单个文件最大值
这里的静态方法executeUpload接收两个参数,分别是服务器储存文件位置和文件对象类。将接收的文件对象转储到服务器目录中。
package com.example.fileuploadbyform.utils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.UUID;
public class FileUtil {
public static void executeUpload(String uploadDir, MultipartFile file) throws Exception{
//文件后缀
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
//文件随机名
String filename = UUID.randomUUID()+suffix;
//创建文件对象
File serverFile = new File(uploadDir + filename);
//转储文件
file.transferTo(serverFile);
}
}
我们准备一个upload.jsp文件用来上传文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
在来到controller层新建一个FileUploadController文件
@RequestMapping("/oneFile")
public String index(){
return "upload";
}
@RequestMapping("/upload")
@ResponseBody
public String upload(HttpServletRequest req, MultipartFile file){
try{
String uploadDir = req.getSession().getServletContext().getRealPath("/")+"upload/";
File dir = new File(uploadDir);
if(!dir.exists()){
dir.mkdir();
}
FileUtil.executeUpload(uploadDir,file);
}catch(Exception e){
e.printStackTrace();
return "上传失败";
}
return "上传成功";
}
多文件上传比起单文件上传有所不同的就是对接收的文件数组做了一个循环储存,下面是代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/uploads" method="post" enctype="multipart/form-data">
文件一<input type="file" name="file">
文件二<input type="file" name="file">
文件三<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
@RequestMapping("/twoFile")
public String index1(){
return "uploads";
}
@RequestMapping("/uploads")
@ResponseBody
public String uploads(HttpServletRequest req, MultipartFile[] file){
try{
String uploadDir = req.getSession().getServletContext().getRealPath("/")+"upload/";
File dir = new File(uploadDir);
if(!dir.exists()){
dir.mkdir();
}
for(int i=0;i<file.length;i++){
if(file[i] != null){
FileUtil.executeUpload(uploadDir,file[i]);
}
}
}catch(Exception e){
e.printStackTrace();
return "上传失败";
}
return "上传成功";
}
1、调用executeUpload之前要判断文件对象是否为空 2、application.yml文件中要配置上传文件最大限制和单个文件上传限制 3、多文件上传时统一form中input的type为file的name要统一,方便controller层中的MultipartFile数组接收
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133512.html原文链接:https://javaforall.cn