首页 > 其他分享 >基础备忘(文件下载)

基础备忘(文件下载)

时间:2023-04-28 14:22:27浏览次数:32  
标签:文件 filePath reportDailyDownloadReq 备忘 FILE new response 下载

文件下载

  @ApiOperation(value = "文件下载")
    @GetMapping("/download")
    public void downLoad(HttpServletResponse response,@Validated @NotNull(message = "reportDailyDownloadReq not be null")   ReportDailyDownloadReq reportDailyDownloadReq) {
        ReportDaily reportDaily = reportDailyService.findReportDailyByDayStringAndReportId(new Date(reportDailyDownloadReq.getDay()), reportDailyDownloadReq.getReportId(),reportDailyDownloadReq.getReportFileTypeEnum());
        if(null==reportDaily){
            throw  new BusinessException(RespCodeEnum.REPORT_DAILY_FILE_RECORD_NOT_FOUND.getCode(),RespCodeEnum.REPORT_DAILY_FILE_RECORD_NOT_FOUND.getMsg());
        }
        String filePath = reportDaily.getReportFile();
        reportDailyService.downLoadFile(response,filePath);
    }
@Override
    public void downLoadFile(HttpServletResponse response, String filePath) {

        File file = new File(filePath);
        if(!file.exists()){
            throw  new BusinessException(RespCodeEnum.REPORT_DAILY_FILE_NOT_FOUND.getCode(),RespCodeEnum.REPORT_DAILY_FILE_NOT_FOUND.getMsg());
        }
        // 开始下载文件
        InputStream in = null;
        try {
            // 1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
            response.setContentType("multipart/form-data");
            // 2.设置文件头:最后一个参数是设置下载文件名
            response.addHeader("Content-Disposition",
                    "attachment;filename=" + URLEncoder.encode(file.getName(), ENCODING));

            in = new FileInputStream(file);

            // 3.通过response获取ServletOutputStream对象(out)
            int b = 0;
            byte[] buffer = new byte[512];
            while (b != -1) {
                b = in.read(buffer);
                if (b != -1) {
                    //4.写到输出流(out)中
                    response.getOutputStream().write(buffer, 0, b);
                }
            }
        } catch (Exception e) {
            log.error("download failed",e);
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
                response.getOutputStream().flush();
            } catch (IOException e) {
                log.error("An exception occurred when releasing the resource",e);
            }
        }
    }

总是有些基础内容用过就忘掉了,缺少总结记录。在此记录下来便于以后查找也为遇到类似问题的人一个小小的帮助。

标签:文件,filePath,reportDailyDownloadReq,备忘,FILE,new,response,下载
From: https://www.cnblogs.com/falcon-fei/p/17362033.html

相关文章

  • Maven指令打包SpringBoot项目提示没有主清单文件
    Maven指令打包SpringBoot项目提示没有主清单文件原文链接:https://blog.csdn.net/greedystar/article/details/86068314项目打包为Jar后,通过java-jarxxxxx.jar运行时提示xxxxx.jar中没有主清单属性,如下:打开jar包,META-INF目录下的MANIFEST.MF,内容如下:Manifest-Version:1.0A......
  • 多线程读写文件
    参考:实践1-2:多线程读写文件-l.w.x-博客园(cnblogs.com)得到的结论是,可以多线程读写,但是会有多种情况:多线程同时读同一个文件,在这种情况下并不会造成冲突多线程同时写同一个文件,会造成写数据丢失多线程同时对同一个文件进行写和读,会造成脏读解决办法是加锁,同时......
  • double转为整型intValue()及sha1在线文件获取,文件都有一个唯一的sha1;jQuery事件方法;
    double转为整型intValue()及sha1在线文件获取,文件都有一个唯一的sha1Doubleindust=RankConstant.INIT_RADIO;indust.intValue()double由100.0---->100整型1.intValue()是java.lang.Number类的方法,Number是一个抽象类。Java中所有的数值类都继承它。也就是说,不单是Integer有int......
  • 深入jar包:从jar包中读取资源文件
    我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。看看下面的代码:Java代码 //源代码1:packageedu.hxraid;import......
  • 基础备忘(发送htm正文带图片并且带附件的邮件)
    需求背景如下:发送htm正文带图片并且带附件的邮件。如题所示,任务拆解关键字为:html正文带图片带附件先介绍普通发邮件的方式添加maven引用<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</ar......
  • Makefile 只修改了.h头文件,编译为什么不起作用?
    M,-MM,-MMD,-MF,-MT区别https://programmer.group/gcc-m-mm-mmd-mf-mt.htmlRef加-MMD选项解决头文件编译生效https://cloud.tencent.com/developer/article/1837814gcc预处理选项https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html......
  • 超大文件上传和断点续传的源代码
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有......
  • Vue3+typescript如何给元素添加一个Ctrl+s的事件,用于保存文件?
    如下代码,建议用这个,e.keyCode已经过时,后面都是用e.key:string.onMounted(()=>{window.addEventListener('keydown',(e)=>{if(e.ctrlKey&&e.key==='s'){//检查是否按下了Ctrl+Se.preventDefault();//阻止默认行为(保存网页)con......
  • ts文件可以操控vue文件里面的ref元素吗
    ts文件可以操控vue文件里面的ref元素吗exportconstfileInputElement=ref<null|HTMLElement>(null);我在ts文件里获得fileInputElement我能操控vue文件里ref为fileInputElement的元素吗import{messagesRef,}from"@/core/helpers/chat";exportconstmessagesRef......
  • linux下利用nohup后台运行jar文件包程序
    Linux运行jar包命令如下:方式一: 1.java-jarXXX.jar特点:当前ssh窗口被锁定,可按CTRL+C打断程序运行,或直接关闭窗口,程序退出那如何让窗口不锁定?方式二 1.java-jarXXX.jar&&代表在后台运行。特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。继续改......