首页 > 其他分享 >设置响应头在浏览器中下载

设置响应头在浏览器中下载

时间:2024-01-16 09:12:04浏览次数:29  
标签:浏览器 File headers 响应 文件夹 ResponseEntity new folder 下载

        1. 设置响应头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", "folder.zip");

        // 使用ResponseEntity.ok()创建ResponseEntity,并将StreamingResponseBody和响应头作为参数
        return ResponseEntity.ok().headers(headers).body(responseBody);

       2.这段代码设置响应头在浏览器中下载;
@Controller
public class DownloadController {

    @GetMapping("/download")
    @ResponseBody
    public ResponseEntity<StreamingResponseBody> download() throws IOException {
        // 要打包的文件夹路径
        String folderPath = "C:/java/folder/";

        // 创建临时文件,用于存储生成的zip文件
        File tempFile = File.createTempFile("temp", ".zip");

        try {
            // 创建文件输出流
            FileOutputStream fos = new FileOutputStream(tempFile);
            // 创建压缩输出流
            ZipOutputStream zos = new ZipOutputStream(fos);

            // 调用递归方法进行文件夹压缩
            zipFolder(folderPath, "", zos);

            // 关闭压缩输出流和文件输出流
            zos.close();
            fos.close();

            // 创建StreamingResponseBody,将文件输出流的内容写入输出流
            StreamingResponseBody responseBody = output -> {
                FileInputStream fis = new FileInputStream(tempFile);
                byte[] buffer = new byte[1024];
                int len;
                while ((len = fis.read(buffer)) > 0) {
                    output.write(buffer, 0, len);
                }
                fis.close();
            };

            // 设置响应头
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            headers.setContentDispositionFormData("attachment", "folder.zip");

            // 使用ResponseEntity.ok()创建ResponseEntity,并将StreamingResponseBody和响应头作为参数
            return ResponseEntity.ok()
                    .headers(headers)
                    .body(responseBody);
        } catch (IOException e) {
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        } finally {
            // 删除临时文件
            tempFile.delete();

            // 删除文件夹
            File folder = new File(folderPath);
            deleteFolder(folder);
        }
    }

    // 递归压缩文件夹的方法,同上例
    // ...

    // 删除文件夹的递归方法
    private void deleteFolder(File folder) {
        if (folder.isDirectory()) {
            File[] files = folder.listFiles();
            if (files != null) {
                for (File file : files) {
                    deleteFolder(file);
                }
            }
        }
        folder.delete();
    }
}

标签:浏览器,File,headers,响应,文件夹,ResponseEntity,new,folder,下载
From: https://www.cnblogs.com/codeLearn/p/17966796

相关文章

  • vulnhub下载
    importbs4importrequests#importlogging#logging.basicConfig(level=logging.DEBUG)defsearch_items(keywork:str)->list[str]:resp=Nonetry:resp=requests.get(url="https://vulnhub.com/?q={}".format(keywork))......
  • python 安装Anaconda3详细步骤 Anaconda的【下载】——【安装】——【配置path环境变
    python安装Anaconda3详细步骤Anaconda的【下载】——【安装】——【配置path环境变量】——【检验】——【修改清华镜像】目录:1.下载2.安装3.配置4.检验5.镜像(修改Anaconda下载通道)前言:装anaconda,就不需要单独装python,anaconda中自带python1.下载(1)官网下载:Anaconda|I......
  • JS - 文件下载
    文件下载1functiondownloadFile(){constlink=document.createElement('a');link.style.display='none';link.setAttribute('href',file.sourceUrl);//设置下载地址link.setAttribute('download',file.fileNam......
  • nginx代理,http下载文件到1G就终止的问题
    我们使用了nginx作为网关,项目中发现再互联网上http下载超过1G的文件就自动终止。但是在局域网中下载正常。查看NGINX的官方文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering从NGINX的缓存配置中发现了一个参数:proxy_max_temp_file_size 看到......
  • ABAP:接口文档下载
    *&---------------------------------------------------------------------**&ReportZTEST_RFC*&---------------------------------------------------------------------**&*&----------------------------------------------------------------......
  • 设置请求拦截和拦截响应
    设置请求拦截和拦截响应//创建axios实例并设置公共的baseURLconstaxiosInstance=axios.create({baseURL:'http://localhost:8080',});//设置请求拦截器(对于所有通过axiosInstance发起的请求都有效)axiosInstance.interceptors.request.use(config=>{//检查JWT......
  • 短视频解析去水印-高清无水印下载视频
    ​短视频已经成为我们日常生活中不可或缺的一部分。当我们看到好的视频,有些人不知道怎么下载,或者遇到下载的视频有水印的问题。这不仅影响了视频的整体美感,还可能对视频的可用性造成影响。如何下载保存无水印的高清原视频呢?一个工具搞定,让你轻松无水印视频。工具:网络游客工具......
  • easyexcel 下载
    1,依赖<!--3.1.1及以上可以支持分批下载--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>2,编码通用步骤:1,构建sheet:设置sheet名称、格式2,构建Exce......
  • 浏览器代理插件Proxy SwitchyOmega安装与使用
    个人博客:无奈何杨(wnhyang)个人语雀:wnhyang共享语雀:在线知识共享Github:wnhyang-OverviewProxySwitchyOmega轻松快捷地管理和切换多个代理设置。安装SwitchyOmega谷歌商店:chromewebstore.google.com/detail/prox…备用下载地址:github.com/FelisCatus/…官网下载地址:switchyomega.or......
  • 日常Bug排查-集群逐步失去响应
    前言日常Bug排查系列都是一些简单Bug排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_Bug现场最近碰到一个产线问题,表现为某个应用集群所有的节点全部下线了。导致上游调用全部报错。而且从时间线分析来看。这个应用的节点是逐步失去响应的。因为请求量较小,直到......