当前位置: 首页 > article >正文

java下载文件流,不生成中间文件。

java下载文件流,不生成中间文件。

    • 代码设计:
    • 代码实现

代码设计:

从前端获取的数据经过后端加工后,生成文件流,并返回前端,(不生成中间文件,注意内存,记得关闭流)

代码实现

    @ApiOperation(value = "下载文件", notes = "")
    @PostMapping("/getDownLoadScriptFile")
    public void getDownLoadScriptFile(@RequestBody ParamsObject vo, HttpServletRequest request, HttpServletResponse response) throws Exception {
        SysUserEntityVo uc = (SysUserEntityVo) request.getAttribute("UC");
        gClientScriptService.getDownLoadScriptFile(vo, uc,response);
    }
  @Override
    public void getDownLoadScriptFile(ParamsObject vo, SysUserEntityVo uc, HttpServletResponse response) throws Exception {
        String fileContent = vo.getFileContent();
        String fileName = vo.getFileName();
        String encodeFileName = URLEncoder.encode(fileName);
        ServletOutputStream out = response.getOutputStream();

        try {
            //设置允许跨域的key
            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
            //文件名有“,”等特殊字符发送到前端会报错,用""括起来解决
            response.addHeader("Content-Disposition", "attachment;filename=\"" + encodeFileName + "\"");
            //设置文件大小
            response.addHeader("Content-Length", "" + fileContent.getBytes().length);
            //设置文件名,避免问题,这个也用""括起来
            response.setHeader("filename,", "filename=\"" + encodeFileName + "\"");
            //设置文件类型
            response.setContentType("application/octet-stream");

            out.write(fileContent.getBytes(StandardCharsets.UTF_8));
            out.flush();

        } catch (Exception e) {
            throw e;
        } finally {
            try {
                out.close();
            } catch (Exception e) {
                throw e;
            }

            try {
                out.close();
            } catch (Exception e) {
                throw e;
            }
        }
    }


http://www.kler.cn/a/463870.html

相关文章:

  • Docker安装Prometheus和Grafana
  • PTA数据结构作业一
  • 【小程序开发】- 小程序版本迭代指南(版本发布教程)
  • 呼叫中心中间件实现IVR进入排队,判断排队超时播放提示音
  • 运维人员的Go语言学习路线
  • PHP框架+gatewayworker实现在线1对1聊天--发送消息(6)
  • deepFM模型pytorch实现
  • Docker常用场景
  • ubuntu24.04配置IPV6
  • react中实现拖拽排序
  • CAD 精简多段线顶点——cad c# 二次开发
  • Pytorch_P1 Pytorch实现mnist手写数字识别
  • 自然语言处理:第八十三章 Prompt格式到底多重要?
  • IP5385为智能手机提供快充方案的30W到100W大功率电源管理芯片
  • 阿里云CDN与腾讯云CDN的全面对比
  • MySQL索引优化:提升查询性能的秘诀
  • 8086汇编(16位汇编)学习笔记08.函数
  • llama.cpp与PyTorch、TensorFlow
  • 镜舟科技荣获 IT168 2024年度创新产品奖
  • 使用flask-caching扩展心得
  • 【机器人】机器人的数学模型:符号表示、位形空间、状态空间、工作空间
  • 开源表单设计器form-create-designer如何保存设计器的规则和回显
  • logback之pattern详解以及源码分析
  • 安卓入门二 Kotlin基础
  • [原创](Modern C++)现代C++的关键性概念: 通俗易懂的解释“折叠表达式(Fold expressions)“
  • javaEE-多线程进阶-JUC的常见类