zoukankan      html  css  js  c++  java
  • 文件上传工具类

    参考:https://blog.csdn.net/sinat_32247833/article/details/79172419

    package com.suobei.xinzhiying.base.utils.file;
    
    import com.suobei.xinzhiying.base.result.ResponseMap;
    import com.suobei.xinzhiying.base.utils.aliyun.AliOssUtils;
    import com.suobei.xinzhiying.base.utils.commons.CommonUtils;
    import org.apache.commons.io.FilenameUtils;
    import org.apache.commons.lang.StringUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.nio.channels.Channels;
    import java.nio.channels.FileChannel;
    import java.nio.channels.ReadableByteChannel;
    import java.util.ArrayList;
    import java.util.List;
    
    public class FileUtils {
    
        /*判断文件是否存在*/
        public static boolean isExists(String filePath) {
            File file = new File(filePath);
            return file.exists();
        }
    
        /*判断是否是文件夹*/
        public static boolean isDir(String path) {
            File file = new File(path);
            if(file.exists()){
                return file.isDirectory();
            }else{
                return false;
            }
        }
    
        /**
         * 文件或者目录重命名
         * @param oldFilePath 旧文件路径
         * @param newName 新的文件名,可以是单个文件名和绝对路径
         * @return
         */
        public static boolean renameTo(String oldFilePath, String newName) {
            try {
                File oldFile = new File(oldFilePath);
                //若文件存在
                if(oldFile.exists()){
                    //判断是全路径还是文件名
                    if (newName.indexOf("/") < 0 && newName.indexOf("\") < 0){
                        //单文件名,判断是windows还是Linux系统
                        String absolutePath = oldFile.getAbsolutePath();
                        if(newName.indexOf("/") > 0){
                            //Linux系统
                            newName = absolutePath.substring(0, absolutePath.lastIndexOf("/") + 1)  + newName;
                        }else{
                            newName = absolutePath.substring(0, absolutePath.lastIndexOf("\") + 1)  + newName;
                        }
                    }
                    File file = new File(newName);
                    //判断重命名后的文件是否存在
                    if(file.exists()){
                        System.out.println("该文件已存在,不能重命名");
                    }else{
                        //不存在,重命名
                        return oldFile.renameTo(file);
                    }
                }else {
                    System.out.println("原该文件不存在,不能重命名");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
        }
    
    
        /*文件拷贝操作*/
        public static void copy(String sourceFile, String targetFile) {
            File source = new File(sourceFile);
            File target = new File(targetFile);
            target.getParentFile().mkdirs();
            FileInputStream fis = null;
            FileOutputStream fos = null;
            FileChannel in = null;
            FileChannel out = null;
            try {
                fis = new FileInputStream(source);
                fos = new FileOutputStream(target);
                in = fis.getChannel();//得到对应的文件通道
                out = fos.getChannel();//得到对应的文件通道
                in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (out != null){
                        out.close();
                    }
                    if (in != null){
                        in.close();
                    }
                    if (fos != null){
                        fos.close();
                    }
                    if (fis != null){
                        fis.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /*读取Text文件操作*/
        public static String readText(String filePath) {
            String lines = "";
            try {
                FileReader fileReader = new FileReader(filePath);
                BufferedReader bufferedReader = new BufferedReader(fileReader);
                String line = null;
                while ((line = bufferedReader.readLine()) != null) {
                    lines += line + "
    ";
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return lines;
        }
    
        /*写入Text文件操作*/
        public static void writeText(String filePath, String content,boolean isAppend) {
            FileOutputStream outputStream = null;
            OutputStreamWriter outputStreamWriter = null;
            BufferedWriter bufferedWriter = null;
            try {
                outputStream = new FileOutputStream(filePath,isAppend);
                outputStreamWriter = new OutputStreamWriter(outputStream);
                bufferedWriter = new BufferedWriter(outputStreamWriter);
                bufferedWriter.write(content);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try{
                    if(bufferedWriter != null){
                        bufferedWriter.close();
                    }
                    if (outputStreamWriter != null){
                        outputStreamWriter.close();
                    }
                    if (outputStream != null){
                        outputStream.close();
                    }
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 汪敏 2017-12-06
         * oss通用单张图片上传
         * @param picture 大文本对象数组
         * @param filePath 文件保存路径
         * @return
         */
        public static ResponseMap upload(MultipartFile picture, String filePath) {
            ResponseMap responseMap = ResponseMap.getInstance();
            List<String> imageUrlList = new ArrayList<>();
            try{
                if (picture.getSize() > 0){
                    String originalFilename = picture.getOriginalFilename(); //获取图片原来名称
                    String filePathName = filePath + CommonUtils.uuid() + "."+ FilenameUtils.getExtension(originalFilename); //真实的图片保存相对路径
                    boolean isOK = AliOssUtils.saveFileObject(filePathName,picture.getInputStream());//将图片上传到oss服务器
                    if(isOK){
                        imageUrlList.add(filePathName);
                        responseMap.ok("上传成功");
                    }else{
                        return responseMap.error("上传失败");
                    }
                }
                responseMap.put(ResponseMap.IMAGE_URL_LIST,imageUrlList);
            }catch(Exception e){
                e.printStackTrace();
            }
            return responseMap;
        }
    
        /**
         * 汪敏 2017-12-06
         * oss通用图片批量上传
         * @param picture 大文本对象数组
         * @param ossFilePath 文件保存oss路径,不要域名
         * @return
         */
        public static ResponseMap upload(MultipartFile[] picture, String ossFilePath) {
            ResponseMap responseMap = ResponseMap.getInstance();
            List<String> imageUrlList = new ArrayList<>();
            try{
                for (MultipartFile pic : picture) {
                    if (pic.getSize() > 0){
                        String originalFilename = pic.getOriginalFilename(); //获取图片原来名称
                        String filePathName = ossFilePath + CommonUtils.uuid() + "."+ FilenameUtils.getExtension(originalFilename); //真实的图片保存相对路径
                        boolean isOK = AliOssUtils.saveFileObject(filePathName,pic.getInputStream());//将图片上传到oss服务器
                        //boolean isOK = AliOssUtils.breakPointUpload(filePathName,pic);//将图片上传到oss服务器
                        if(isOK){
                            imageUrlList.add(filePathName);
                            responseMap.put(ResponseMap.MESSAGE,"上传成功");
                        }else{
                            return responseMap.error("上传失败");
                        }
                    }
                }
                responseMap.put(ResponseMap.IMAGE_URL_LIST,imageUrlList);
            }catch(Exception e){
                e.printStackTrace();
            }
            return responseMap;
        }
    
        /**
         * 将本地文件上传到oss系统
         * @param localFilePath 本地文件目录路径
         * @param ossFilePath oss目录路径
         * @return
         */
        public static ResponseMap upload(String localFilePath, String ossFilePath) {
            ResponseMap responseMap = ResponseMap.getInstance();
            try{
                File[] files = fileSort(localFilePath);
                List<String> imageUrlList = AliOssUtils.saveFileBatch(ossFilePath,files);//将图片上传到oss服务器
                System.out.println("图片上传oss完成");
                responseMap.put(ResponseMap.IMAGE_URL_LIST,imageUrlList);
            }catch(Exception e){
                e.printStackTrace();
                responseMap.error("上传失败");
            }
            return responseMap;
        }
    
    
    
        /**
         * 汪敏 2017-12-20
         * 服务器通用图片批量上传
         * @param picture 大文本对象数组
         * @param mp4TempDir 文件保存全路径
         * @return
         */
        public static boolean uploadLocal(MultipartFile[] picture, String mp4TempDir) {
            boolean bool = false;
            try{
                for (int i = 0; i < picture.length; i++) {
                    if (picture[i].getSize() > 0){
                        String originalFilename = picture[i].getOriginalFilename(); //获取图片原来名称
                        String filePathName = mp4TempDir + i + "."+ FilenameUtils.getExtension(originalFilename); //真实的图片保存相对路径
                        picture[i].transferTo(new File(filePathName));
                    }
                }
                bool = true;
                System.out.println("图片上传到服务器完成");
            }catch(Exception e){
                e.printStackTrace();
            }
            return bool;
        }
    
        /**
         * 通过上一层目录和目录名得到最后的目录层次
         * @param previousDir 上一层目录
         * @param dirName 当前目录名
         * @return
         */
        public static String getSaveDir(String previousDir, String dirName) {
            if (StringUtils.isNotBlank(previousDir)){
                dirName = previousDir + "/" + dirName + "/";
            }else {
                dirName = dirName + "/";
            }
            return dirName;
        }
    
        /**
         * 如果目录不存在,就创建文件
         * @param dirPath
         * @return
         */
        public static String mkdirs(String dirPath) {
            try{
                File file = new File(dirPath);
                if(!file.exists()){
                    file.mkdirs();
                }
            }catch(Exception e){
                e.printStackTrace();
            }
            return dirPath;
        }
    
    
        /**
         * 在Linux系统中读取文件时将文件排序
         * @param filePath
         * @return
         */
        public static File[] fileSort(String filePath){
            File[] files = new File(filePath).listFiles();
            int filesLength = files.length;
            String nextFix = FilenameUtils.getExtension(files[0].getName());
            File[] fileNames = new File[filesLength];
            for (int i = 0; i < filesLength; i++) {
                for (int j = 0; j < filesLength; j++) {
                    String absolutePath = files[j].getAbsolutePath();
                    if (absolutePath.endsWith("/" + i + "." + nextFix) || absolutePath.endsWith("\" + i + "." + nextFix)){
                        fileNames[i] = new File(absolutePath);
                        break;
                    }
                }
            }
            return fileNames;
        }
    
    
        /**
         * 普通文件下载,文件在服务器里面
         * @param request
         * @param response
         */
        public static void download(HttpServletRequest request, HttpServletResponse response) {
            try{
                //设置文件下载时,文件流的格式
                String realPath = request.getServletContext().getRealPath("/");
                realPath = realPath + "index.jsp";
                System.out.println("下载地址="+realPath);
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));
                BufferedOutputStream bos =  new BufferedOutputStream(response.getOutputStream());
                //下面这个变量保存的是要下载的文件拼接之后的完整路径
                String downName = realPath.substring(realPath.lastIndexOf("/") + 1);
                System.out.println("下载文件名="+downName);
                response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(downName,"utf-8"));
                byte[] buff = new byte[2048];
                int bytesRead;
                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                    bos.write(buff, 0, bytesRead);
                }
                try {
                    bis.close();
                    bos.close();
                }catch (Exception e){
                    e.printStackTrace();;
                }
            }catch(Exception e){
                e.printStackTrace();
                System.out.println("下载出错");
            }
        }
    
        /**
         * 普通文件下载,文件路径固定
         * @param targetFile 下载的文件路径
         * @param response
         */
        public static void download(String targetFile, HttpServletResponse response) {
            try{
                System.out.println("下载文件路径="+targetFile);
                //设置文件下载时,文件流的格式
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(targetFile));
                BufferedOutputStream bos =  new BufferedOutputStream(response.getOutputStream());
                //下面这个变量保存的是要下载的文件拼接之后的完整路径
                String downName = targetFile.substring(targetFile.lastIndexOf("/") + 1);
                System.out.println("下载文件名="+downName);
                response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(downName,"utf-8"));
                byte[] buff = new byte[2048];
                int bytesRead;
                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                    bos.write(buff, 0, bytesRead);
                }
                try {
                    bis.close();
                    bos.close();
                }catch (Exception e){
                    e.printStackTrace();;
                }
            }catch(Exception e){
                e.printStackTrace();
                System.out.println("下载出错");
            }
        }
    
        /**
         * 下载网络文件
         * @param targetFile
         * @param response
         */
        public static void downloadUrl(String targetFile, HttpServletResponse response) {
            try{
                URL website = new URL(targetFile);
                ReadableByteChannel rbc = Channels.newChannel(website.openStream());
                FileOutputStream fos = new FileOutputStream("D:/img/1.zip");//例如:test.txt
                fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
                fos.close();
            }catch(Exception e){
                e.printStackTrace();
                System.out.println("下载出错");
            }
        }
    
        /**
         * 删除文件
         * @param fileName
         * @return
         */
        
    public static boolean delete (String fileName){
        try{
            File sourceFile = new File(fileName);
            if(sourceFile.isDirectory()){
                for (File listFile : sourceFile.listFiles()) {
                    delete(listFile.getAbsolutePath());
                }
            }
            return sourceFile.delete();
        }catch(Exception e){
            e.printStackTrace();
        }
        return false;
    }
    }
  • 相关阅读:
    2020-11-07:已知一个正整数数组,两个数相加等于N并且一定存在,如何找到两个数相乘最小的两个数?
    2020-11-06:go中,谈一下调度器。
    Python2和Python3中urllib库中urlencode的使用注意事项
    python爬虫基础
    python自动抢票
    Movist for Mac 1.4.2 破解版 | Mac上好用的视频播放器有哪些?7 款本地视频播放器实测对比
    前端自动化及优化
    移动端库
    jQuery
    JavaScript
  • 原文地址:https://www.cnblogs.com/duguxiaobiao/p/12091737.html
Copyright © 2011-2022 走看看