SSM框架中如何利用访问接口的形式进行文件下载?

发布于 2022-09-12 00:24:11 字数 1341 浏览 10 评论 0

问题描述

项目中有一需求:前端访问一个接口进行文件的下载。
当前代码如下

@RequestMapping(value = "/reportBatchDownload", produces = "text/html;charset=UTF-8", method = RequestMethod.POST)
    public @ResponseBody ResponseEntity<byte[]> reportBatchDownload(HttpServletRequest  httpServletRequest,
            HttpServletResponse httpServletResponse) throws IOException {
        File file = new File("E://S-2.jpg");
      //File file = new File("E://下载目标文件.txt");
        byte[] body = null;
        @SuppressWarnings("resource")
        InputStream is = new FileInputStream(file);
        body = new byte[is.available()];
        is.read(body);
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Disposition", "attchement;filename=" + file.getName());
        HttpStatus statusCode = HttpStatus.OK;
        ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
        return entity;
    }

前端访问接口的返回:
下载文件为E://S-2.jpg时:
image.png
下载文件为E://下载目标文件.txt时:
image.png
image.png


接口返回结果为下载文件的文本内容,并非以文件形式返回,此问题如何解决?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葬﹪忆之殇 2022-09-19 00:24:11

你先试试直接访问链接能不能下载,
用ajax请求的话你得用arraybuffer或stream接收响应数据,自己写存文件的逻辑

Content-Disposition 的文件名需要urlencode不然响应头里的文件名就是乱码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文