zoukankan      html  css  js  c++  java
  • 【SSM】AppFileUtils

    11

    package com.kikyo.sys.utils;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.net.URLEncoder;
    import java.util.Properties;
    
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.io.FileUtils;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    
    public class AppFileUtils {
    
        /**
         * 得到文件上传的路径
         */
        public static String PATH = "E:/upload/";
    
        static {
            InputStream stream = AppFileUtils.class.getClassLoader().getResourceAsStream("config/file.properties");
            Properties properties = new Properties();
            try {
                properties.load(stream);
                PATH = properties.getProperty("path");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    
        /**
         * 文件下载
         *
         * @param response
         * @param path
         * @param oldName
         * @return
         */
        public static ResponseEntity<Object> downloadFile(HttpServletResponse response, String path, String oldName) {
            //4,使用绝对路径+相对路径去找到文件对象
            File file = new File(AppFileUtils.PATH, path);
            //5,判断文件是否存在
            if (file.exists()) {
                try {
                    try {
                        //如果名字有中文 要处理编码
                        oldName = URLEncoder.encode(oldName, "UTF-8");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    //把file转成一个bytes
                    byte[] bytes = FileUtils.readFileToByteArray(file);
                    HttpHeaders header = new HttpHeaders();
                    //封装响应内容类型(APPLICATION_OCTET_STREAM 响应的内容不限定)
                    header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
                    //设置下载的文件的名称
                    header.setContentDispositionFormData("attachment", oldName);
                    //创建ResponseEntity对象
                    ResponseEntity<Object> entity = new ResponseEntity<Object>(bytes, header, HttpStatus.CREATED);
                    return entity;
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            } else {
                PrintWriter out;
                try {
                    out = response.getWriter();
                    out.write("文件不存在");
                    out.flush();
                    out.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return null;
            }
        }
    
    
        /**
         * 根据相对路径删除硬盘上文件
         *
         * @param path2
         */
        public static void deleteFileUsePath(String path) {
            String realPath = PATH + path;
            //根据文件
            File file = new File(realPath);
            if (file.exists()) {
                file.delete();
            }
        }
    }

  • 相关阅读:
    总结类初始化时的代码执行顺序
    Calcite数据源适配器对时间字段的操作问题
    如何自定义一个Calcite对Tablesaw查询的适配器
    Redis集群 Redis Cluster
    培养代码逻辑
    在线查看office文件的两种方法
    WPF Prism框架合集(9.Dialog)
    WPF Prism框架合集(8.Navigation)
    WPF Prism框架合集(7.Mvvm)
    springboot @OneToOne 解决JPA双向死循环/返回json数据死循环
  • 原文地址:https://www.cnblogs.com/kikyoqiang/p/12221635.html
Copyright © 2011-2022 走看看