• springboot如何实现文件下载呢?


    转自:

    springboot如何实现文件下载呢?

    下文笔者讲述SpringBoot实现文件下载的方法分享,如下所示:

    文件存储在服务器指定位置

    import java.io.*;
    import java.net.URLEncoder;
    import java.util.*;
    import com.alibaba.excel.ExcelWriter;
    import com.alibaba.excel.metadata.Sheet;
    import com.alibaba.excel.support.ExcelTypeEnum;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
     
    import javax.servlet.http.HttpServletResponse;
    @RestController
    public class Controller {
     
        @GetMapping(value = "/downloadFile", consumes = MediaType.ALL_VALUE)
        void downloadFile(final HttpServletResponse response)
                throws Exception {
     
            // 获取文件
            File file = new File("D:\java265.txt");
            //文件名
            String fileName = file.getName();
     
            // 清空缓冲区,状态码和响应头(headers)
            response.reset();
            // 设置ContentType,响应内容为二进制数据流,编码为utf-8,此处设定的编码是文件内容的编码
            response.setContentType("application/octet-stream;charset=utf-8");
            // 以(Content-Disposition: attachment; filename="filename.jpg")格式设定默认文件名,设定utf编码,此处的编码是文件名的编码,使能正确显示中文文件名
            response.setHeader("Content-Disposition", "attachment;fileName="+ fileName +";filename*=utf-8''"+URLEncoder.encode(fileName,"utf-8"));
     
            // 实现文件下载
            byte[] buffer = new byte[1024];
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            try {
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                // 获取字节流
                OutputStream os = response.getOutputStream();
                int i = bis.read(buffer);
                while (i != -1) {
                    os.write(buffer, 0, i);
                    i = bis.read(buffer);
                }
                System.out.println("Download successfully!");
            }
            catch (Exception e) {
                System.out.println("Download failed!");
            }
            finally {
                if (bis != null) {
                    try {
                        bis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (fis != null) {
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    创建文件数据并下载

    import java.io.*;
    import java.net.URLEncoder;
    import java.util.*;
    import java.util.List;
     
    import com.alibaba.excel.EasyExcel;
    import com.alibaba.excel.ExcelWriter;
     
    import com.alibaba.excel.support.ExcelTypeEnum;
    import com.alibaba.excel.write.metadata.WriteSheet;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletResponse;
    @RestController
    public class Controller {
     
        @GetMapping(value = "/downloadExcel", consumes = MediaType.ALL_VALUE)
        void downloadExcel(final HttpServletResponse response)
                throws Exception {
            String name = "测试." + ExcelTypeEnum.XLSX;
            // 清空缓冲区,状态码和响应头(headers)
            response.reset();
            // 设置ContentType,响应内容为文本数据,编码为utf-8,此处设定的编码是文件内容的编码
            response.setContentType("text/plain;charset=utf-8");
            // 以(Content-Disposition: attachment; filename="filename.jpg")格式设定默认文件名,设定utf编码,此处的编码是文件名的编码,使能正确显示中文文件名
            response.setHeader("Content-Disposition", "attachment;fileName=" + name + ";filename*=utf-8''" + URLEncoder.encode(name, "utf-8"));
     
            // 响应输出流
            OutputStream out = response.getOutputStream();
            // 建立excel
            ExcelWriter excelWriter = EasyExcel.write(out).build();
            // 建立sheet
            WriteSheet writeSheet = EasyExcel.writerSheet("sheet1").build();
            // 指定sheet并写数据
            excelWriter.write(getListString(), writeSheet);
            // 不要忘记
            excelWriter.finish();
            out.flush();
        }
     
        // 生成excel内容
        List> getListString() {
            List> result = new LinkedList<>();
            List data1 = new LinkedList<>();
            data1.add("1");data1.add("maomao");data1.add("java265");
            result.add(data1);
            List data2 = new LinkedList<>();
            data1.add("2");data1.add("maomao-2");data1.add("java265-3");
            result.add(data2);
            List data3 = new LinkedList<>();
            data1.add("3");data1.add("maomao-3");data1.add("java265-4");
            result.add(data3);
            return result;
        }
    }
  • 相关阅读:
    前端性能优化方法与实战01 体系总览:性能优化体系及关键指标设定
    Mybatis-Plus 之 @TableId(value=“xxx”,type = IdType.xxx)注解
    虚拟机运行Hadoop | 各种问题解决的心路历程
    C++ DAY06 c++多态
    神经网络中间层特征图可视化(输入为音频)
    Apache DolphinScheduler 3.0.0 正式版发布!
    Jmeter分布式压测 —— 易踩坑点
    Web权限&权限划分
    【web应用系统实践】第四章作业
    【开源】SpringBoot框架开发公司货物订单管理系统
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127917013