必威体育Betway必威体育官网
当前位置:首页 > IT技术

Java实现文件下载

时间:2019-07-14 20:41:02来源:IT技术作者:seo实验室小编阅读:80次「手机版」
 

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是‘/’)。

相关阅读

Java网络编程与NIO学习总结

微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站。作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中

真正的java的四舍五入

原文地址:https://blog.csdn.net/qwfylwc/article/details/53939906 下面列举让你惊讶的现象,或许你还一直这么用: 1、使用Math.roun

VB实现 汉字转拼音缩写的函数

汉字转拼音缩写的函数(VB)Public Function getPYChar(char As String) As StringDim lChar As LonglChar = 65536 +

排序算法之堆排序(Heap Sort)——C语言实现

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。 算法分析 在学习堆排序之前我们要先

Java-找不到或无法加载主类 HelloWorld

系统版本:Win10 64位JDK版本:jdk1.8.0_171开发工具:Eclipse 问题描述:在cmd中使用命令java HelloWorld时,提示“找不到或无法加载主类

分享到:

栏目导航

推荐阅读

热门阅读