首页 > 编程语言 >Java文件下载代码及中文文件名不显示的问题

Java文件下载代码及中文文件名不显示的问题

时间:2023-04-18 15:12:54浏览次数:44  
标签:文件 中文 Java ResponseEntity 文件名 代码 headers file new

@GetMapping("/downloadOrderDemo")
    public ResponseEntity<Resource> downloadFile() throws IOException {
        // 读取文件内容
        File file = new File(System.getProperty("user.dir") + File.separator + "work-order/src/main/java/com/workorder/file/模版.xlsx");
        InputStreamResource resource = new InputStreamResource(new FileInputStream(file));

        // 设置 HTTP 响应头信息
        HttpHeaders headers = new HttpHeaders();
        String fileName = "模版.xlsx";
        String encodedFileName = URLEncoder.encode(fileName, "UTF-8");
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename*=UTF-8''" + encodedFileName);

        // 返回文件内容
        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(file.length())
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .body(resource);
    }

1.上述代码中,@GetMapping("/download") 注解指定了这是一个 GET 请求,并且路径为 /file/downloadResponseEntity<Resource> 类型的返回值表示该接口会返回一个文件资源。在接口的实现中,我们首先读取文件内容,然后设置 HTTP 响应头信息,最后将文件内容封装在 ResponseEntity 中返回。

需要注意的是,上述代码中的文件路径是硬编码在代码中的,实际应用中应该将其配置在配置文件中或者通过其他方式动态获取。另外,上述代码中使用了 InputStreamResource 类来将文件内容转换为 Resource,这是 Spring 框架提供的一个抽象类,用于表示任何可以被读取的资源。如果你的应用需要支持大文件下载,可以使用 StreamingResponseBody 类来实现。

2.在上述代码中,首先使用 URLEncoder.encode 方法对文件名进行 UTF-8 编码,然后将编码后的文件名添加到 HTTP 响应头的 Content-Disposition 属性中。需要注意的是,由于 RFC 6266 规范建议使用 RFC 5987 格式来传递编码后的文件名,因此上述代码中使用了 filename*=UTF-8'' 来指定编码方式。

标签:文件,中文,Java,ResponseEntity,文件名,代码,headers,file,new
From: https://www.cnblogs.com/zzcsza/p/17329645.html

相关文章

  • Java Web实现文件上传下载功能实例解析
    ​ 第一点:Java代码实现文件上传FormFilefile=manform.getFile();StringnewfileName= null;Stringnewpathname= null;StringfileAddre= "/numUp";try{    InputStreamstream=file.getInputStream();// 把文件读入    StringfilePath=request.......
  • jmeter取样器javaRequest脚本8
    1,创建一个maven工程2,通过maven编译打包生成一个jar包3,重启jmeter,新建javarequest请求4,开始执行脚本本文永久更新地址:1,创建一个maven工程在pom.xml文件中添加maven下载地址:https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_java/5.4.1<depe......
  • 图像处理Photoshop 2023(ps2023)v24.2中文mac版
    Photoshop2023(ps2023)图像处理v24.2中文版,我们对它进行了改进。新的设置菜单将提供更好的操作。增强了对图像处理功能的支持。新增了“使用Photoshop在多个平台间移动图像”功能。新的编辑界面更简单了。→→↓↓载Photoshop2023Mac版 1.全新的设置菜单对新版本的设......
  • javassist 报错 ; is missing
    在通过javassist编写的时候,主要代码如下:Stringcode="for(Stringaa:tt){....}";启动后报 Exceptioninthread"main"javassist.CannotCompileException:[sourceerror];ismissingatjavassist.CtNewMethod.make(CtNewMethod.java:84)atjava......
  • Mybatis 批量更新(foreach成多条sql) 为什么比 java 中反复执行单条插入语句效率高?
    使用MyBatis的批量更新功能可能比逐行更新更高效。使用批量更新可以将多个更新操作合并为一个批处理操作,并将所有操作发送给数据库一次(只需建立一次连接),从而减少了数据库的IO操作和网络开销,提高了系统的性能。mybatis批量更新的方法:https://cloud.tencent.com/developer/arti......
  • Java集合框架Collection接口
    Collection接口概念Java集合框架是Java编程中的一个非常重要的部分,提供了一组用于处理数据集合的接口和类。其中Collection接口是Java集合框架的基础接口之一,定义了一些基本的集合操作,包括添加元素、删除元素、遍历集合等。在这里,我将为您详细介绍Java集合框架中的Collection接口。......
  • Java:ArrayList初始化赋值
    测试环境$java-versionjavaversion"1.8.0_251"Java(TM)SERuntimeEnvironment(build1.8.0_251-b08)JavaHotSpot(TM)64-BitServerVM(build25.251-b08,mixedmode)方式一:常规方式List<Integer>list=newArrayList<>();list.add(1);list......
  • invalid comparison: java.util.ArrayList and java.lang.String 异常分析及解决方法
    nvalidcomparison:java.util.ArrayListandjava.lang.String异常解决方法异常原因首先我们可以确定是在mybatis的xml中的list操作出现错误然后发现在接收list的时候加了判断list!=’’,导致list(数组集合类型)和空字符串(字符串类型)进行比较,故报错解决办法,对于list类型进......
  • Java环境与Eclipse SDK安装涉及的环境变量调试,java环境配置
    资源包请自己下载。文本太大,我传到百度了。https://pan.baidu.com/s/1p6aFDOeXWULnK8STdQkwmw  这是地址资源地址小白师从高中老班长祯淮大哥,偷师于网页中的他人经验,因此,先说声谢谢他人的经验分享,为了记录学习过程,方便整理知识,做了以下学习分享。有错请大神指出。 这是我装好的......
  • java-spi
    不解释spi是啥了啊,就简单来看看他的作用吧。在java中,我们可以定义一个接口,然后通过具体的类来实现接口从而完成某种功能。 这是典型的面向接口编程思维。这样做肯定没问题,但是接下来介绍一个新的方式来实现这个功能。就是java提供的spi机制。我这里创建两个OrderService的实现,......