Java 文件上传 工具类

       工具类。可以直接复制粘贴。一些路径的Global需要自己写

import com.manage.common.core.web.domain.ImgUrlEntity;
import com.manage.common.global.filepath.FileGlobal;
import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Date;
import java.util.UUID;


public class FileUtil {

    /**
     * 下载文件
     *
     * @param realPath 初始路径
     * @param fileName 文件名
     */
    public static void downloadFile(String realPath, String fileName, HttpServletResponse response) {
        ServletOutputStream out = null;
        FileInputStream inputStream = null;
        try {
            inputStream = FileUtils.openInputStream(new File(realPath + fileName));
            // 防止下载时名称乱码
            response.setContentType("multipart/form-data");
            fileName = new String(fileName.getBytes("gbk"), "iso8859-1");
            response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
            out = response.getOutputStream();
            int b = 0;
            byte[] buffer = new byte[512];
            while (b != -1) {
                b = inputStream.read(buffer);
                if (b != -1) {
                    out.write(buffer, 0, b);//4.写到输出流(out)中
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }
                if (out != null) {
                    out.close();
                    out.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 保存上传的图片
     *
     * @param realPath 初始路径
     * @param file     文件信息对象
     * @return 返回保存后的文件名
     * @throws IOException
     */
    public static String savePhotoFile(String realPath, MultipartFile file) throws IOException {
        //获取文件的后缀
        String prefix = getFilePrefix(file);
        //获取备份名称
        String fileName = getBakFileName(file);
        fileName = fileName.split("\\.")[0] + ".jpg";
        //保存文件
        FileUtils.copyInputStreamToFile(file.getInputStream(), new File(realPath, fileName));
        //不是图片格式则删除
        String[] photoFormat = {"jpg", "jpeg", "JPG", "png", "PNG"};
        if (!Arrays.asList(photoFormat).contains(prefix)) {
            //删除文件
            FileUtils.deleteQuietly(new File(realPath + fileName));
        }
        return fileName;
    }

    /**
     * 将临时目录中的文件保存到真实路径中
     *
     * @param temporaryPath 临时路径加文件名
     * @return 返回保存后的文件名
     * @throws IOException
     */
    public static String saveRealPhotoFile(String temporaryPath) {
        //获取临时路径下的文件对象
        File temporaryFile = new File(temporaryPath);
        //获取真实路径,和文件名
        String separator = "\\\\";
        if ("Linux".equals(System.getProperty("os.name"))) {//判断当前系统
            separator = File.separator;
        }
        String[] strs = temporaryPath.split(separator);
//        String[] strs = temporaryPath.split("\\\\");
        String realPath = "";
        String fileName = "";
        for (int i = 0; i < strs.length; i++) {
            if (i == strs.length - 1) {
                fileName = strs[i];
                break;
            }
            if (i == strs.length - 2) {
                temporaryPath = realPath + strs[i] + File.separator;
                continue;
            }
            realPath += strs[i] + File.separator;
        }
        try {
            //保存文件
            FileUtils.copyInputStreamToFile(new FileInputStream(FileGlobal.FILE_BASE_PATH + temporaryFile.getPath()), new File(FileGlobal.FILE_BASE_PATH + realPath + fileName));
            //删除临时目录
            FileUtils.deleteDirectory(new File(FileGlobal.FILE_BASE_PATH + temporaryPath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return realPath + fileName;
    }

    /**
     * 保存上传的文件,修改文件名为时间戳
     *
     * @param realPath 初始路径
     * @param file     文件信息对象
     * @return 文件名称
     * @throws IOException
     */
    public static String savePackageFile(String realPath, MultipartFile file) throws IOException {
        //获取文件名
        String fileName = new Date().getTime() + "." + getFilePrefix(file);
        //保存文件
        FileUtils.copyInputStreamToFile(file.getInputStream(), new File(realPath, fileName));
        return fileName;
    }

    /**
     * 保存上传的文件,修改文件名为时间戳
     *
     * @param realPath 初始路径
     * @param file     文件信息对象
     * @return 文件名称
     * @throws IOException
     */
    public static String savePackageFileRealName(String realPath, MultipartFile file) throws IOException {
        //获取文件名
        String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf(".")) + new Date().getTime() + "." + getFilePrefix(file);
        //保存文件
        FileUtils.copyInputStreamToFile(file.getInputStream(), new File(realPath, fileName));
        return fileName;
    }

    /**
     * 保存上传的文件,文件名不修改
     *
     * @param realPath 初始路径
     * @param file     文件信息对象
     * @return 文件名称
     * @throws IOException
     */
    public static String saveFile(String realPath, MultipartFile file) throws IOException {
        //获取文件名
        String fileName = file.getOriginalFilename();
        //保存文件
        FileUtils.copyInputStreamToFile(file.getInputStream(), new File(realPath, fileName));
        return fileName;
    }

    /**
     * 删除文件
     *
     * @param path 路径
     * @return
     * @throws IOException
     */
    public static boolean delFileByPath(String path) throws IOException {
        //删除文件
        return FileUtils.deleteQuietly(new File(FileGlobal.FILE_BASE_PATH + path));
    }

    /**
     * 保存图片
     *
     * @param type           1=截图
     * @param bytes
     * @param fileTypeSuffix
     * @return
     */
    public static ImgUrlEntity uploadPic(int type, byte[] bytes, String fileTypeSuffix) {
        String path = "";
        String url = "";
        switch (type) {
            case 1:
                String timeStr = TimeUtil.getDateTimeArray()[0] + "/" + TimeUtil.getDateTimeArray()[1] + "/" + TimeUtil.getDateTimeArray()[2] + "/";
                path = FileGlobal.FILE_BASE_PATH + FileGlobal.ALARM_SCREENSHOT + timeStr;
                url = FileGlobal.ALARM_SCREENSHOT + timeStr;
                break;
            case 2:
                String timeStr2 = TimeUtil.getDateTimeArray()[0] + "/" + TimeUtil.getDateTimeArray()[1] + "/" + TimeUtil.getDateTimeArray()[2] + "/";
                path = FileGlobal.FILE_BASE_PATH + FileGlobal.DATA_COLLEC_INFO + timeStr2;
                url = FileGlobal.DATA_COLLEC_INFO + timeStr2;
                break;

        }
        String name = UUID.randomUUID().toString();
        String originalFileName = name + "_original." + fileTypeSuffix;
        String thumbnailFileName = name + "_thumbnail." + fileTypeSuffix;
        int fileType = 0;
        String fileSuffix = fileTypeSuffix.toLowerCase();

        if (fileSuffix.endsWith("mp4") || fileSuffix.endsWith("avi")
                || fileSuffix.endsWith("3gpp") || fileSuffix.endsWith("3gp") || fileSuffix.startsWith("mov"))
            fileType = 1;
        try {
            File file = new File(path + "/" + originalFileName);
            FileUtils.writeByteArrayToFile(file, bytes);
        } catch (Exception e) {
            e.printStackTrace();
            return new ImgUrlEntity();
        }

        try {
            if (fileType == 0)
                ImageHelper.zoomImage(path + "/" + originalFileName, path + "/" + thumbnailFileName, 120, 120);
        } catch (Exception e) {
            e.printStackTrace();
            return new ImgUrlEntity();
        }
        return new ImgUrlEntity(url + originalFileName, url + thumbnailFileName, fileType);
    }

    public static File file_put_contents(String savePath, InputStream is) {
        File file = new File(savePath);
        OutputStream os = null;
        try {
            os = new FileOutputStream(file);
            byte buffer[] = new byte[4 * 1024];
            int len = 0;
            while ((len = is.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
            os.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return file;
    }

    /**
     * 保存上传的excel
     *
     * @param realPath 初始路径
     * @param file     文件信息对象
     * @throws IOException
     */
    public static String saveExcelFile(String realPath, MultipartFile file) throws IOException {
        //获取文件的后缀
        String prefix = getFilePrefix(file);
        //获取备份名称
        String fileName = getBakFileName(file);
        //保存文件
        FileUtils.copyInputStreamToFile(file.getInputStream(), new File(realPath, fileName));
        //不是图片格式则删除
        String[] formatArr = {"xlsx", "xls"};

        if (!Arrays.asList(formatArr).contains(prefix)) {
            //删除文件
            FileUtils.deleteQuietly(new File(realPath + fileName));
        }
        return fileName;
    }

    /**
     * 获取文件的后缀
     *
     * @param file
     * @return
     */
    public static String getFilePrefix(MultipartFile file) {
        //获取文件名称
        String originalFilename = file.getOriginalFilename();
        //获取文件的后缀
        return originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
    }

    /**
     * 生成文件的备份名称
     *
     * @param file
     * @return
     */
    public static String getBakFileName(MultipartFile file) {
        //获取文件名称
        // String originalFilename = file.getOriginalFilename();
        //获取当前时间的毫秒级
        Date date = new Date();
        long time = date.getTime();
        //获取文件的后缀
        String prefix = getFilePrefix(file);
        //修改为备份文件名
        return String.valueOf(time) + "-" + Utils.genUUID().substring(0, 5) + "." + prefix;
    }


    // 计算文件的 MD5 值 根据MD5值 判断文件是否是同一个文件
    public static String getFileMD5(File file) {
        if (!file.isFile()) {
            return null;
        }
        MessageDigest digest = null;
        FileInputStream in = null;
        byte buffer[] = new byte[8192];
        int len;
        try {
            digest = MessageDigest.getInstance("MD5");
            in = new FileInputStream(file);
            while ((len = in.read(buffer)) != -1) {
                digest.update(buffer, 0, len);
            }
            BigInteger bigInt = new BigInteger(1, digest.digest());
            return bigInt.toString(16);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 创建文件并写入内容
     *
     * @param content
     * @param path
     * @throws IOException
     */
    public static void writeFile(String content, String path) throws IOException {
        File file = new File(path);
        FileUtils.write(file, content + "\r\n", "utf-8", true);
    }

}

简单应用 

       //文件路径 FileGlobal.FILE_BASE_PATH 基础路径,例如:D:\sougou

       // FileGlobal.DATA_TEST_URL 文件具体路径 

        String realPath = FileGlobal.FILE_BASE_PATH + FileGlobal.DATA_TEST_URL;
        String url = FileGlobal.DATA_TEST_URL+ FileUtil.savePhotoFile(realPath, file);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `FileUtils.copyInputStreamToFile` 是一个 Java 类库中的方法,用于将输入流中的数据复制到目标文件中。 以下是该方法的签名: ```java public static void copyInputStreamToFile(InputStream source, File destination) throws IOException ``` 其中: - `source`:输入流,包含要复制到目标文件中的数据。 - `destination`:目标文件,即要将数据复制到其中的文件。 使用该方法可以很方便地将一个输入流中的数据复制到一个文件中。需要注意的是,在复制过程中,该方法会将输入流中的所有数据都复制到目标文件中,因此请确保目标文件足够大,以容纳输入流中的所有数据。 ### 回答2: 在Java编程中,我们经常需要将一个输入流中的数据复制到一个文件中。这时,我们可以使用FileUtils.copyInputStreamToFile方法来实现这个操作。下面,我将详细介绍这个方法的使用方法和注意事项。 FileUtils.copyInputStreamToFile方法的定义如下: public static void copyInputStreamToFile(InputStream source, File destination) throws IOException 该方法有两个参数,分别是输入流 source 和目标文件 destination。 使用该方法的步骤如下: 1. 首先,我们需要创建一个输入流对象,用于读取数据。例如,我们可以使用Java中的FileInputStream类来读取文件。 InputStream source = new FileInputStream("input.txt"); 2. 然后,我们需要创建一个目标文件对象,用于存储数据。例如,我们可以使用Java中的File类来表示文件。 File destination = new File("output.txt"); 3. 最后,我们调用FileUtils.copyInputStreamToFile方法将输入流中的数据复制到目标文件中。 FileUtils.copyInputStreamToFile(source, destination); 在使用FileUtils.copyInputStreamToFile方法时,我们需要注意以下几个方面: 1. 该方法会自动关闭输入流对象。因此,不需要我们手动关闭输入流。 2. 如果目标文件已经存在,该方法会覆盖目标文件中的内容。 3. 如果目标文件所在的目录不存在,该方法会自动创建目录。 4. 如果复制过程中出现异常,该方法会抛出IOException异常。因此,我们需要在调用该方法时进行异常处理。 总之,FileUtils.copyInputStreamToFile方法是Java编程中常用的一个工具方法,可以将一个输入流中的数据复制到一个文件中。在使用该方法时,我们需要注意输入流的关闭、目标文件的覆盖和目录的创建等问题。 ### 回答3: fileutils.copyinputstreamtofile是一个Java中的文件操作工具,它提供了一种用于将输入流复制到文件的方法。 在Java中,输入流是从文件或其他数据源读取数据的流。FileUtils.copyInputStreamToFile()方法接受两个参数,第一个参数是输入流,第二个参数是目标文件。源文件的内容将被复制到目标文件中。 该方法的流程非常简单,它首先创建一个输出文件,并将输入流复制到这个输出文件中。当复制完成后,输入流将被关闭,并且输出文件将完成写入。 通常,文件复制操作涉及到的一些问题包括: 1.数据如何输入 2.如何控制写入的数据大小 3.如何处理可能发生的错误 FileUtils.copyInputStreamToFile()方法非常适合处理这些问题,并且提供了一种简单且可靠的方式来复制文件。 对于使用这种方法进行文件复制的程序,建议在方法执行之前进行一些必要的检查,例如防止复制不存在的文件或输入流为空等。 总之,fileutils.copyinputstreamtofile是一个非常方便的Java文件操作工具,可以帮助处理文件和数据的输入输出,以及文件复制等常见任务。使用这种方法可以简化代码,提高程序的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值