Java实现文件下载

Java实现文件下载Java实现文件下载

大家好,又见面了,我是你们的朋友全栈君。

一、前台通过a标签打开接口,传入文件id

<a href="/cdc/announcement/downloadFile/1">下载</a>

二、后台接收id,查找对应文件,进行下载

    @RequestMapping(value = "downloadFile/{id}", method = RequestMethod.GET)
    @PreAuthorize("hasAuthority('view')")
    @ResponseBody
    public void downloadFile(HttpServletRequest req, HttpServletResponse resp, @PathVariable("id") Long id) {
        AnnouncementAnnex announcementAnnex = announcementAnnexService.selectById(id);
        //真实文件名
        String name = announcementAnnex.getAnnexUrl();
        String downloadName=announcementAnnex.getAnnexName();
//        进行转码后的文件名,用来下载之后的文件名
        PublicController.download(resp,name,downloadName);
    }

其中download方法

 /**
     * @param resp
     * @param name         文件真实名字
     * @param downloadName 文件下载时名字
     */
    public static void download(HttpServletResponse resp, String name, String downloadName) {
        String fileName = null;
        try {
            fileName = new String(downloadName.getBytes("GBK"), "ISO-8859-1");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        ///home/tomcat/apache-tomcat-9.0.1/files
        String realPath = "D:" + File.separator + "apache-tomcat-8.5.15" + File.separator + "files";
//        String realPath=File.separator+"home"+File.separator+"tomcat"+File.separator+"apache-tomcat-9.0.1"+File.separator+"files";
        String path = realPath + File.separator + name;
        File file = new File(path);
        resp.reset();
        resp.setContentType("application/octet-stream");
        resp.setCharacterEncoding("utf-8");
        resp.setContentLength((int) file.length());
        resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        OutputStream os = null;
        try {
            os = resp.getOutputStream();
            bis = new BufferedInputStream(new FileInputStream(file));
            int i = 0;
            while ((i = bis.read(buff)) != -1) {
                os.write(buff, 0, i);
                os.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

fileName是文件下载之后的名字,filePath是文件所在文件夹地址,path是文件地址,注意设置的响应类型和编码方式

其中File.separator为路径分隔符,他能自动识别是哪个操作系统而使用不同的路径分隔符(windows是‘\’,linux是‘/’)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156824.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 二叉树前序遍历 迭代_二叉树的前序中序后序遍历算法

    二叉树前序遍历 迭代_二叉树的前序中序后序遍历算法二叉树的前序遍历对于一颗二叉树,当遍历它的时候使用递归总是轻而易举的。这是二叉树前序遍历-使用递归publicvoidpreorderTraversal(TreeNoderoot){if(root==null)return;System.out.print(root.data+””);preorde…

  • 5.25 使用半调图案命令制作影印效果 [Illustrator CC教程][通俗易懂]

    5.25 使用半调图案命令制作影印效果 [Illustrator CC教程][通俗易懂]原文:http://coolketang.com/staticDesign/5a97b8c4128fe1189bd33ddc.html1.本节课将为您演示[半调图案]命令的使用。首先选择文档中,待编辑的图像。 2.接着依次点击[效果&gt;效果画廊]命令。 3. 4.在弹出的效果画廊窗口中,点击[缩小]按钮,在预览区缩小显示当前的图像。 5.点击[素描]左侧的三角形,显示[素描]效果组…

  • 【转载】ViewState的用法

    【转载】ViewState的用法

    2021年11月21日
  • Qt配置OpenCV教程,亲测已试过(详细版)[通俗易懂]

    Qt配置OpenCV教程,亲测已试过(详细版)[通俗易懂]win10系统Qt5.12.9配置OpenCV4.5.1库教程Qt,OpenCV,Cmake详细下载安装教程软件准备首先要说的是装软件还是装最新的好,不用考虑各种软件的版本对应问题,都是最新版的情况下它们互相之间一定是兼容的,下边具体来说下需要的几个软件。64位win10系统Qt5.12.9Cmake3.18.0OpenCV4.5.1以下叙述顺序即为安装配置顺序QtDownload国

  • DSL和配置_ds3配置

    DSL和配置_ds3配置为什么要用DSL呢?这个问题可以算DSL应用中第二重要的问题。第一问题是我前面的讨论过的什么应用是DSL适应的范围。首先我们应该承认,DSL不是最简明且易于理解的方法。我们来跟配置文件的方式比较一下。显然DSL在比较中会落败,因为至少对客户来说不存在语法的问题。DSL的运行效率也未必就很好,至少从配置的角度来说会如此。DSL的开放效率也未必就是最好的,因为很多场景下因为DS…

    2022年10月29日
  • 专业编写c语言的软件,适合编写C语言代码的几款软件

    专业编写c语言的软件,适合编写C语言代码的几款软件C语言基本上是大学计算机及其相关专业在大一上学期就会开的一门课程,但是很多学生听得都是一些理论知识,其实究其主要原因,还是因为你在上课认真听了,但是却没有在课后好好的自己去主动敲代码,想要动手操作,就需要几款编程利器,手机电脑都可以,下面我们就先看一下手机软件:手机软件1.C语言编译器:这是手机上的一个C语言编程软件,可以直接在手机上编译运行C语言程序,下面我简单介绍一下这个软件:首先,下载安装C…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号