每天学习一个小功能:java文件下载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天学习一个小功能:java文件下载相关的知识,希望对你有一定的参考价值。

思路:

1、获取文件上传到upload文件夹下的文件名

2、将文件名处理成上传时的文件名并封装成集合给前端展示

3、前端根据提交的文件名再后台查找upload文件夹下查找并下载

 

代码:

/**
     * 1、获取文件上传到upload文件夹下的文件名

        2、将文件名处理成上传时的文件名并封装成集合给前端展示
     * @param request
     * @param model
     * @return
     */
    
    @RequestMapping("xiazai")
    public String xiaZai(HttpServletRequest request,Model model){
        
        // 实现思路:先获取upload目录下所有文件的文件名,再保存;跳转到down.jsp列表展示
        
                //1. 初始化map集合Map<包含唯一标记的文件名, 简短文件名>  ;
                Map<String,String> fileNames = new HashMap<String,String>();
                
                //2. 获取上传目录,及其下所有的文件的文件名
                String bathPath =request.getSession().getServletContext().getRealPath("/upload");
                // 目录
                File file = new File(bathPath);
                // 目录下,所有文件名
                String list[] = file.list();
                // 遍历,封装
                if (list != null && list.length > 0){
                    for (int i=0; i<list.length; i++){
                        // 全名
                        String fileName = list[i];
                        // 短名
                        String shortName = fileName.substring(fileName.lastIndexOf("#")+1);
                        // 封装
                        fileNames.put(fileName, shortName);
                    }
                }
                System.out.println(fileNames.size());
                model.addAllAttributes(fileNames);
        
        return "xiazai";
    }

 

/**
     * 1、获取文件上传到upload文件夹下的文件名
     * @param request
     * @param response
     * @return
     */
   

 

@RequestMapping("down")
    public void zhenZhengXiaZai(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
        // 获取用户下载的文件名称(url地址后追加数据,get)
        String fileName = request.getParameter("fileName");
        fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
        
        // 先获取上传目录路径
        String basePath = request.getSession().getServletContext().getRealPath("/upload");
        // 获取一个文件流
        InputStream in = new FileInputStream(new File(basePath,fileName));
        
        // 如果文件名是中文,需要进行url编码
        fileName = URLEncoder.encode(fileName, "UTF-8");
        // 设置下载的响应头,让浏览器自动下载
        response.setHeader("content-disposition", "attachment;fileName=" + fileName);
        
        // 获取response字节流
        OutputStream out = response.getOutputStream();
        byte[] b = new byte[1024];
        int len = -1;
        while ((len = in.read(b)) != -1){
            out.write(b, 0, len);
        }
        // 关闭
        out.close();
        in.close();
    }

以上是关于每天学习一个小功能:java文件下载的主要内容,如果未能解决你的问题,请参考以下文章

第57题输入输出系列5-文件锁定功能

第57题输入输出系列5-文件锁定功能

每天学点Java小知识

微信背单词类小程序,小鸡单词源码下载,打卡微信小程序

运动健身小管家app下载|运动健身小管家app安卓版下载

java学习第一个小项目--商品系统