图片上传使我们在程序中是经常用到的,因此把它封装成一个工具类非常方便我们的使用;以下是我整理的图片上传工具类。
所需jar包
<!-- 文件上传需要的jar包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
|
工具类代码:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;
/**
* 文件操作工具类
* @author Zhang
*/
public final class FileUtils {
private static Logger logger = LoggerFactory.getLogger(FileUtils.class);
private FileUtils() {
throw new AssertionError("不能产生该对象");
}
/**
* 保存上传的文件
* @param file 上传的文件
* @param prefix 文件路径前缀
* @param path 上传的文件所属文件夹名称
* @return 文件名
*/
public static String uploadFile(MultipartFile file, String prefix, String path) throws IOException {
if (file == null || file.isEmpty()) {
return null;
}
String originName = file.getOriginalFilename();
int index = originName.lastIndexOf('.');
String suffix;
if (index != -1) {
suffix = originName.substring(index);
} else {
String contentType = file.getContentType();
logger.info("the contentType is {}", contentType);
suffix = "." + contentType.substring(contentType.indexOf('/') + 1);
}
StringBuilder s = new StringBuilder(prefix);
String filename = UUID.randomUUID().toString();
s.append(path).append('/').append(filename).append(suffix);
filename = s.toString();
logger.info("file path is {}", filename);
File f = createFile(filename);
file.transferTo(f);
s.delete(0, prefix.length());
return s.toString();
}
/**
* 创建新文件
* @param f 文件
* @throws IOException 创建文件失败抛出异常
*/
public static File createFile(File f) throws IOException {
f.getParentFile().mkdirs();
f.createNewFile();
return f;
}
/**
* 创建新文件
* @param filename 文件路径
* @throws IOException
*/
public static File createFile(String filename) throws IOException {
return createFile(new File(filename));
}
/**
* 获取文件
* @param prefix 文件前缀
* @param filename 文件名
* @return 文件对象
*/
public static File getFile(String prefix, String filename) {
return new File(prefix + filename);
}
/**
* 将文件写入到输出流
* @param f 文件
* @param out 输出流
* @throws IOException
*/
public static void writeToStream(File f, OutputStream out) throws IOException {
try (FileInputStream fis = new FileInputStream(f)) {
byte[] buf = new byte[4096];
int len = -1;
while ((len = fis.read(buf)) != -1) {
out.write(buf, 0, len);
}
}
}
}
|
调用:
//调用工具类,返回上传文件的路径
String idFrontUrl = FileUtils.uploadFile(“文件路径”, "文件上传的路径", "文件上传的目录");
|