springboot(2.0) 文件上传功能
github网址:文件上传
项目名:springboot-fileupload项目
先展示一下项目的结构(红色箭头为必要的文件)
需要的额外的jar包
<!--文件上传包-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<!--io操作包-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
配置后台处理
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
/**
* @Auther: cpb
* @Date: 2018/9/3 19:36
* @Description:
*/
@Controller
public class UploadController {
@RequestMapping("/")
public String index() {
return "upload";
}
@RequestMapping("/upload")
public String singleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes, HttpServletRequest request) {
// MultipartFile是对当前上传的文件的封装,当要同时上传多个文件时,可以给定多个MultipartFile参数(数组)
if (file.isEmpty()) {
redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
return "result";
}
// 取文件格式后缀名
// String type = file.getOriginalFilename().substring(file.getOriginalFilename().indexOf("."));
String filename = file.getOriginalFilename();// 获取文件名
String path = request.getServletContext().getRealPath("/upload/" + filename);// 存放位置(tomcat文件夹下面)
File savefile = new File(path);
//判断上传文件的保存目录是否存在
if (!savefile.exists() && !savefile.isDirectory()) {
System.out.println(path+"目录不存在,需要创建");
//创建目录
savefile.mkdir();
}
try {
// FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作,不需要额外的再去关闭IO流
FileUtils.copyInputStreamToFile(file.getInputStream(), savefile);// 复制临时文件到指定目录下
} catch (IOException e) {
e.printStackTrace();
}
return "message";
}
}
配置前端视图
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<form method="POST" action="/upload" enctype="multipart/form-data" target="hidden_frame">
<input type="file" name="file" /><br/><br/>
<input type="submit" value="上传文件" />
</form>
<%--form表单提交页面不刷新--%>
<iframe name='hidden_frame' id="hidden_frame" style="display:none"></iframe>
</body>
</html>
结果展示
MultipartFile类
FilleUtils类
修饰符和类型 方法和描述
static String byteCountToDisplaySize(BigInteger size)
返回文件大小的人类可读版本,其中输入表示特定数量的字节。
static String byteCountToDisplaySize(long size)
返回文件大小的人类可读版本,其中输入表示特定数量的字节。
static Checksum checksum(File file, Checksum checksum)
使用指定的校验和对象计算文件的校验和。
static long checksumCRC32(File file)
使用CRC32校验和例程计算文件的校验和。
static void cleanDirectory(File directory)
清除目录而不删除它。
static boolean contentEquals(File file1, File file2)
比较两个文件的内容以确定它们是否相等。
static boolean contentEqualsIgnoreEOL(File file1, File file2, String charsetName)
比较两个文件的内容以确定它们是否相等。
static File[] convertFileCollectionToFileArray(Collection<File> files)
将包含java.io.File instanced的Collection转换为数组表示形式。
static void copyDirectory(File srcDir, File destDir)
将整个目录复制到保留文件日期的新位置。
static void copyDirectory(File srcDir, File destDir, boolean preserveFileDate)
将整个目录复制到新位置。
static void copyDirectory(File srcDir, File destDir, FileFilter filter)
将筛选的目录复制到保留文件日期的新位置。
static void copyDirectory(File srcDir, File destDir, FileFilter filter, boolean preserveFileDate)
将筛选的目录复制到新位置。
static void copyDirectoryToDirectory(File srcDir, File destDir)
将目录复制到保留文件日期的另一个目录中。
static void copyFile(File srcFile, File destFile)
将文件复制到保留文件日期的新位置。
static void copyFile(File srcFile, File destFile, boolean preserveFileDate)
将文件复制到新位置。
static long copyFile(File input, OutputStream output)
将字节从a复制File到OutputStream。
static void copyFileToDirectory(File srcFile, File destDir)
将文件复制到保留文件日期的目录。
static void copyFileToDirectory(File srcFile, File destDir, boolean preserveFileDate)
将文件复制到目录,可选择保留文件日期。
static void copyInputStreamToFile(InputStream source, File destination)
将字节从一个文件复制到一个文件 。InputStream sourcedestination
static void copyToDirectory(File src, File destDir)
将文件或目录复制到另一个目录中,保留文件日期。
static void copyToDirectory(Iterable<File> srcs, File destDir)
将文件复制到保存每个文件日期的目录。
static void copyToFile(InputStream source, File destination)
将字节从一个文件复制到一个文件 。InputStream sourcedestination
static void copyURLToFile(URL source, File destination)
将URL source中的字节复制到文件中 destination。
static void copyURLToFile(URL source, File destination, int connectionTimeout, int readTimeout)
将URL source中的字节复制到文件中 destination。
static void deleteDirectory(File directory)
以递归方式删除目录。
static boolean deleteQuietly(File file)
删除文件,从不抛出异常。
static boolean directoryContains(File directory, File child)
确定parent目录是否包含child元素(文件或目录)。
static void forceDelete(File file)
删除文件。
static void forceDeleteOnExit(File file)
在JVM退出时计划要删除的文件。
static void forceMkdir(File directory)
创建一个目录,包括任何必要但不存在的父目录。
static void forceMkdirParent(File file)
为给定的文件创建任何必要但不存在的父目录。
static File getFile(File directory, String... names)
从名称元素集构造文件。
static File getFile(String... names)
从名称元素集构造文件。
static File getTempDirectory()
返回File表示系统临时目录的表示形式。
static String getTempDirectoryPath()
返回系统临时目录的路径。
static File getUserDirectory()
返回File表示用户主目录的表示。
static String getUserDirectoryPath()
返回用户主目录的路径。
static boolean isFileNewer(File file, Date date)
测试指定的File是否比指定的更新 Date。
static boolean isFileNewer(File file, File reference)
测试指定的值File是否比引用更新 File。
static boolean isFileNewer(File file, long timeMillis)
测试File指定的时间是否比指定的时间参考更新。
static boolean isFileOlder(File file, Date date)
测试指定的File是否早于指定的 Date。
static boolean isFileOlder(File file, File reference)
测试指定的值File是否早于引用 File。
static boolean isFileOlder(File file, long timeMillis)
测试File指定的时间是否早于指定的时间参考。
static boolean isSymlink(File file)
确定指定的文件是符号链接而不是实际文件。
static Iterator<File> iterateFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
允许迭代给定目录(以及可选的子目录)中的文件。
static Iterator<File> iterateFiles(File directory, String[] extensions, boolean recursive)
允许迭代与扩展数组匹配的给定目录(以及可选的子目录)中的文件。
static Iterator<File> iterateFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
允许迭代给定目录(以及可选的子目录)中的文件。
static LineIterator lineIterator(File file)
File使用VM的默认编码返回a中行的Iterator 。
static LineIterator lineIterator(File file, String encoding)
返回a中行的迭代器File。
static Collection<File> listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
查找给定目录(以及可选的子目录)中的文件。
static Collection<File> listFiles(File directory, String[] extensions, boolean recursive)
查找与扩展数组匹配的给定目录(以及可选的子目录)中的文件。
static Collection<File> listFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
查找给定目录(以及可选的子目录)中的文件。
static void moveDirectory(File srcDir, File destDir)
移动目录。
static void moveDirectoryToDirectory(File src, File destDir, boolean createDestDir)
将目录移动到另一个目录。
static void moveFile(File srcFile, File destFile)
移动文件。
static void moveFileToDirectory(File srcFile, File destDir, boolean createDestDir)
将文件移动到目录。
static void moveToDirectory(File src, File destDir, boolean createDestDir)
将文件或目录移动到目标目录。
static FileInputStream openInputStream(File file)
打开FileInputStream指定文件的a,提供比简单调用更好的错误消息new FileInputStream(file)。
static FileOutputStream openOutputStream(File file)
打开FileOutputStream指定文件的a,检查并创建父目录(如果不存在)。
static FileOutputStream openOutputStream(File file, boolean append)
打开FileOutputStream指定文件的a,检查并创建父目录(如果不存在)。
static byte[] readFileToByteArray(File file)
将文件的内容读入字节数组。
static String readFileToString(File file)已过时。
2.5 readFileToString(File, Charset)改用(并指定适当的编码)
static String readFileToString(File file, Charset encoding)
将文件的内容读入String。
static String readFileToString(File file, String encoding)
将文件的内容读入String。
static List<String> readLines(File file)已过时。
2.5 readLines(File, Charset)改用(并指定适当的编码)
static List<String> readLines(File file, Charset encoding)
逐行读取文件的内容到字符串列表。
static List<String> readLines(File file, String encoding)
逐行读取文件的内容到字符串列表。
static long sizeOf(File file)
返回指定文件或目录的大小。
static BigInteger sizeOfAsBigInteger(File file)
返回指定文件或目录的大小。
static long sizeOfDirectory(File directory)
以递归方式计算目录的大小(所有文件的长度的总和)。
static BigInteger sizeOfDirectoryAsBigInteger(File directory)
以递归方式计算目录的大小(所有文件的长度的总和)。
static File toFile(URL url)
从a转换URL为a File。
static File[] toFiles(URL[] urls)
将每个数组转换URL为a File。
static void touch(File file)
实现与Unix上的“touch”实用程序相同的行为。
static URL[] toURLs(File[] files)
将每个数组转换File为a URL。
static boolean waitFor(File file, int seconds)
等待NFS传播文件创建,强制超时。
static void write(File file, CharSequence data)已过时。
2.5 write(File, CharSequence, Charset)改用(并指定适当的编码)
static void write(File file, CharSequence data, boolean append)已过时。
2.5 write(File, CharSequence, Charset, boolean)改用(并指定适当的编码)
static void write(File file, CharSequence data, Charset encoding)
如果CharSequence不存在,则将CharSequence写入创建该文件的文件。
static void write(File file, CharSequence data, Charset encoding, boolean append)
如果CharSequence不存在,则将CharSequence写入创建该文件的文件。
static void write(File file, CharSequence data, String encoding)
如果CharSequence不存在,则将CharSequence写入创建该文件的文件。
static void write(File file, CharSequence data, String encoding, boolean append)
如果CharSequence不存在,则将CharSequence写入创建该文件的文件。
static void writeByteArrayToFile(File file, byte[] data)
将字节数组写入创建该文件的文件(如果该文件不存在)。
static void writeByteArrayToFile(File file, byte[] data, boolean append)
将字节数组写入创建该文件的文件(如果该文件不存在)。
static void writeByteArrayToFile(File file, byte[] data, int off, int len)
len将从offset开始的指定字节数组中的字节写入off文件,如果文件不存在则创建该文件。
static void writeByteArrayToFile(File file, byte[] data, int off, int len, boolean append)
len将从offset开始的指定字节数组中的字节写入off文件,如果文件不存在则创建该文件。
static void writeLines(File file, Collection<?> lines)
将toString()集合中每个项目的值File逐行写入指定的行。
static void writeLines(File file, Collection<?> lines, boolean append)
将toString()集合中每个项目的值File逐行写入指定的行。
static void writeLines(File file, Collection<?> lines, String lineEnding)
将toString()集合中每个项目的值File逐行写入指定的行。
static void writeLines(File file, Collection<?> lines, String lineEnding, boolean append)
将toString()集合中每个项目的值File逐行写入指定的行。
static void writeLines(File file, String encoding, Collection<?> lines)
将toString()集合中每个项目的值File逐行写入指定的行。
static void writeLines(File file, String encoding, Collection<?> lines, boolean append)
将toString()集合中每个项目的值File逐行写入指定的行,可选择附加。
static void writeLines(File file, String encoding, Collection<?> lines, String lineEnding)
将toString()集合中每个项目的值File逐行写入指定的行。
static void writeLines(File file, String encoding, Collection<?> lines, String lineEnding, boolean append)
将toString()集合中每个项目的值File逐行写入指定的行。
static void writeStringToFile(File file, String data)已过时。
2.5 writeStringToFile(File, String, Charset)改用(并指定适当的编码)
static void writeStringToFile(File file, String data, boolean append)已过时。
2.5 writeStringToFile(File, String, Charset, boolean)改用(并指定适当的编码)
static void writeStringToFile(File file, String data, Charset encoding)
将String写入创建该文件的文件(如果该文件不存在)。
static void writeStringToFile(File file, String data, Charset encoding, boolean append)
将String写入创建该文件的文件(如果该文件不存在)。
static void writeStringToFile(File file, String data, String encoding)
将String写入创建该文件的文件(如果该文件不存在)。
static void writeStringToFile(File file, String data, String encoding, boolean append)
将String写入创建该文件的文件(如果该文件不存在)。