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); } } } } |