如何在rest控制器中指定下载文件名?

mklgxw1f  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(260)

有一个rest控制器使用get-mapped方法:

@GetMapping(value="/{filename}", produces= MediaType.APPLICATION_PDF_VALUE)
    public @ResponseBody byte[] letItTry(@PathVariable("filename") String filename) {
        try {                        
            return download(filename);
        }
        catch (Exception ex) {
            return new byte[0];
        }
    }

下载方法如下所示:

public byte[] download(String filename) {  
        try(var fis= new FileInputStream(new File(filename))) {
            return fis.readAllBytes();
        } 
        catch (Exception ex) {
            return new byte[0];
        }
    }

从web浏览器调用端点时,它返回带有默认restcontroller名称的pdf文档,例如“test.pdf”。有没有办法强制控制器返回给定自定义名称的文件?

ndasle7k

ndasle7k1#

您应该将httpservletresponse添加到get方法中,并使用标头在其中设置文件名:

public @ResponseBody byte[] letItTry(@PathVariable("filename") String filename, HttpServletResponse response) {
    try {
        response.setHeader("Content-Disposition", "attachment; filename=" + filename);
        return download(filename);
    }
    catch (Exception ex) {
        return new byte[0];
    }
}

相关问题