@PathVariable注解参数带点号导致被截取的解决办法

项目场景:

今天再做博瑞网站下载的时候,使用PathVariable出现了问题。


问题描述:

提供下载的时候,访问地址是localhost:8080/download/A9.zip,但是拿到的fileName只有A9
  @GetMapping("download/{fileName}")
    @ApiOperation("下载文件,需要传递")
    public ResponseEntity downLoadFile(@PathVariable("fileName") String fileName) throws IOException {
    
    
        System.out.println("fileName"+fileName);
        File file = new File(FilePath.path);

        String path = FilePath.zip;

        File zipFile = new File(file.getAbsolutePath()+path+fileName);

        HttpHeaders headers = new HttpHeaders();
        //二进制流数据
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //通知浏览器以attachment(下载方式)下载文件,文件名称为指定名称
        headers.setContentDispositionFormData("attachment",fileName);
        byte[] bytes = FileUtils.readFileToByteArray(zipFile);
        return new ResponseEntity<byte[]>(bytes,headers, HttpStatus.CREATED);
    }

原因分析:

Spring MVC默认把点后面的信息当成是文件后缀,这个时候我们就要修改这个默认值,不然就只会介绍点之前的数据


解决方案:

再path值的后面加上了【:.+】,这个【:.+】就是为了说明参数是什么样子的,这里是带上点,当然你也可以写成【:[a-zA-Z0-9.]+】了

  @GetMapping("download/{fileName:.+}")
    @ApiOperation("下载文件,需要传递")
    public ResponseEntity downLoadFile(@PathVariable("fileName") String fileName) throws IOException {
    
    
        System.out.println("fileName"+fileName);
        File file = new File(FilePath.path);

        String path = FilePath.zip;

        File zipFile = new File(file.getAbsolutePath()+path+fileName);

        HttpHeaders headers = new HttpHeaders();
        //二进制流数据
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //通知浏览器以attachment(下载方式)下载文件,文件名称为指定名称
        headers.setContentDispositionFormData("attachment",fileName);
        byte[] bytes = FileUtils.readFileToByteArray(zipFile);
        return new ResponseEntity<byte[]>(bytes,headers, HttpStatus.CREATED);
    }

猜你喜欢

转载自blog.csdn.net/qq_44688861/article/details/114311382
今日推荐