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

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);
    }
java 复制代码
  @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;
            }
        }
    }
相关推荐
java1234_小锋34 分钟前
一周学会Matplotlib3 Python 数据可视化-坐标轴 (Axis)
开发语言·python·信息可视化·matplotlib·matplotlib3
回家路上绕了弯1 小时前
线程池优化实战:从性能瓶颈到极致性能的演进之路
java·后端
小苏兮1 小时前
飞算JavaAI深度解析:专为Java生态而生的智能引擎
java·开发语言·人工智能·java开发·飞算javaai炫技赛
Bdygsl2 小时前
前端开发:JavaScript(6)—— 对象
开发语言·javascript·ecmascript
babytiger2 小时前
我的c#用到Newtonsoft.Json.dll,Fleck.dll这两个dll能否打到一个exe 中,而不是一起随着exe拷贝
开发语言·c#·json
How_doyou_do3 小时前
睿抗开发者大赛国赛-24
开发语言·python
用户84913717547163 小时前
JDK 17 实战系列(第4期):安全性与稳定性增强详解
java·后端·性能优化
自由的疯3 小时前
java程序员怎么从Python小白变成Python大拿?(三)
java·后端·trae
用户84913717547163 小时前
JustAuth实战系列(第4期):模板方法模式实战 - AuthDefaultRequest源码剖析
java·后端·架构
weixin_411191843 小时前
安卓Handler和Looper的学习记录
android·java