文件上传工具类(JAVA)
最编程
2024-06-23 11:39:30
...
最近接手的一个项目需要做一个文件上传的功能,从网上搜到的...,没有自己想要的,emmm,鸡肋,还是自己动手吧
//添加依赖
<!--常用工具包-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<!--加密工具-->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
添加完依赖开始撸代码吧
献上完整代码↓↓↓
package com.easy.web.utils;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.velocity.shaded.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class FileUploadUtils {
/**
* 设置保存文件路径名
* @param pathName
* @return
*/
public static FileUploadUtils.Builder setPathName(String pathName)
{
return builder().setPathName(pathName);
}
/**
* 设置允许上传文件大小
* @param maxSize
* @return
*/
public static FileUploadUtils.Builder setMaxSize(int maxSize)
{
return builder().setMaxSize(maxSize);
}
/**
* 设置最大文件名长度
* @param maxFileNameLength
* @return
*/
public static FileUploadUtils.Builder setMaxFileNameLength(int maxFileNameLength)
{
return builder().setMaxFileNameLength(maxFileNameLength);
}
/**
* 设置允许上传文件路径
* @param allowedExtension
* @return
*/
public static FileUploadUtils.Builder setAllowedExtension(String[] allowedExtension)
{
return builder().setAllowedExtension(allowedExtension);
}
public static FileUploadUtils.Builder builder()
{
return new Builder();
}
public static class Builder{
/**
* 默认大小 50M
*/
private long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;
/**
* 默认的文件名最大长度 100
*/
private int DEFAULT_FILE_NAME_LENGTH = 100;
/**
* 允许上传文件的后缀名
*/
private String[]DEFAULT_ALLOWED_EXTENSION={};
/**
* 保存文件路径名
*/
private String PATH_NAME;
public FileUploadUtils.Builder setMaxSize(int maxSize) {
this.DEFAULT_MAX_SIZE = maxSize*1024*1024;
return this;
}
public FileUploadUtils.Builder setMaxFileNameLength(int maxFileNameLength) {
this.DEFAULT_FILE_NAME_LENGTH = maxFileNameLength;
return this;
}
public FileUploadUtils.Builder setAllowedExtension(String[] allowedExtension) {
this.DEFAULT_ALLOWED_EXTENSION = allowedExtension;
return this;
}
public FileUploadUtils.Builder setPathName(String pathName) {
this.PATH_NAME = pathName;
return this;
}
/**
* 上传
* @param file
* @return
* @throws IOException
*/
public final String upload(MultipartFile file) throws IOException {
//校验
if (StringUtils.trimToNull(PATH_NAME)==null)throw new IOException("文件保存路径为空");
String extensionFilename=FilenameUtils.getExtension(file.getOriginalFilename());
if (!ArrayUtils.isEmpty(DEFAULT_ALLOWED_EXTENSION)&&!ArrayUtils.contains(DEFAULT_ALLOWED_EXTENSION,extensionFilename))throw new IOException("只允许"+ArrayUtils.toString(DEFAULT_ALLOWED_EXTENSION)+"文件上传");
if (file.getSize()>DEFAULT_MAX_SIZE)throw new IOException("文件过大");
if (file.getOriginalFilename().length()>DEFAULT_FILE_NAME_LENGTH)throw new IOException("文件名过长");
//上传
String fileName = extractFilename(file);
File desc = getAbsoluteFile(PATH_NAME, fileName);
file.transferTo(desc);
return fileName;
}
/**
* 编码文件名
*/
private final String extractFilename(MultipartFile file)
{
String filename = file.getOriginalFilename();
String extension = getExtension(file);
filename = DateFormatUtils.format(new Date(),"/yyyy/MM/dd") + "/" + encodingFilename(filename) + "." + extension;
return filename;
}
/**
* 编码文件名
*/
private final String encodingFilename(String filename)
{
filename = filename.replace("_", " ");
filename = DigestUtils.md5Hex(filename + System.nanoTime()+ RandomStringUtils.randomNumeric(6));
return filename;
}
/**
* 获取文件名的后缀
*
* @param file 表单文件
* @return 后缀名
*/
public final String getExtension(MultipartFile file)
{
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
return extension;
}
/**
* 创建文件
* @param uploadDir
* @param filename
* @return
* @throws IOException
*/
private final File getAbsoluteFile(String uploadDir, String filename) throws IOException
{
File desc = new File(uploadDir + File.separator + filename);
if (!desc.getParentFile().exists())
{
desc.getParentFile().mkdirs();
}
if (!desc.exists())
{
desc.createNewFile();
}
return desc;
}
}
}
把文件放到项目里,使用下面方式调用
//接收 MultipartFile file
//允许上传文件的后缀名
String[]exts={"jpg","gif"};
//将文件上传到d盘下upt文件夹内,只支持后缀名为jpg,gif的文件,文件最大为1M
FileUploadUtils.setPathName("d:/upt/").setAllowedExtension(exts).setMaxSize(1).upload(file);
上传文件轻松搞定!!
上一篇: java - 我想用 Seven Bulls 制作一个小型网盘。有一些关于上传和下载的问题我不明白!我想用七牛来做一个小网盘,有一些上传和下载的问题我不懂!请问七牛是怎么做的呢?-PHP.cn问答
推荐阅读
-
Java表情转译工具类适用于Mac系统
-
Java工具类:轻松处理视频上传、转换、播放和下载的多格式支持
-
用Java从网络下载图片和视频到本地,然后上传到你的个人文件服务器!
-
用Java的FFmpeg工具合并音频文件
-
理解Java中的包与类的关系:包是否等同于文件夹?
-
Java开发中的Apache Commons Lang库:StringUtils工具类详解与源代码解析
-
Java常用数字工具类 大数乘法、加法、减法运算(2)
-
如何使用bootstrap-fileinput工具快速预览选中的图片文件,而不进行实际上传操作
-
创建一个Java工具类用于快速生成二维码
-
轻松掌握Java获取网络接口信息:一篇搞定的Java实用工具类指南