每天学习一个小功能: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();
    }

时间: 2024-11-05 08:32:01

每天学习一个小功能:java文件下载的相关文章

每天学习一个小功能:java文件上传

====(1.)第一种.利用普通缓冲流进行文件上传 ① 前端 注意: 1.指定表单类型为文件上传表单 :enctype="multipart/form-data"  2.提交方式必须为:post3.表单中,存在文件域 的表单元素 <form name="frm_test" action="${pageContext.request.contextPath }/shangchuan" method="post" encty

通达OA 在工作流中增加根据流水号查询其他工作流的一个小功能

前段时间帮朋友实现的一个小功能,今天再整理一下.要实现的功能其实也很简单,就是在一个工作流里能查看到另一个管理的工作流里的内容.流程多了,各流程之间也会有些关联,原来朋友做的只是在表单里输入要查询的流水号,要查询的人需要按照这个流水号在工作流查询里打开这个功能再查询,点击.打开这些动作说来简单但是也是增加了一些麻烦.为了解决这个小小的问题,我在表单里简单改造了一些,增加了一个查询的链接,这样每次查询的时候点击一下就OK了,技术就是为人服务的么. 需要说明的是:这两个流程是有关联的,而不能任意查所

超级表格一个小功能就甩全国高校的管理平台甩N条街!

超级表格微信公众号:chaojibiaoge 超级表格作为一款企业级应用,服务着许多团队的同时,也渗透在教育领域和科研机构中.具有极大自由度的超级表格总能被玩出新花样,从而帮助提升工作效率. 在广东技术师范学校. 校训:厚德博学, 唯实求新 "求新"意为:与时俱进,不断开拓创新 小林作为校学生干部执行核心的一员,不仅打理着学院大大小小的事务,还包括学生会等各种组织,新生报到与毕业生就业等信息管理.他已经大四,即将步入社会.回首大学年华,他的努力成为人生的财富,超级表格也成为其中的一串珍

Redis学习——常用小功能

一.慢查询分析(查询日志:所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似的功能.) Redis客户端执行一条命令分为如下4个部分:1)发送命令  2)命令排队  3)命令执行  4)返回结果 (需要注意,慢查询只统计步骤3的时间,所以没有慢查询并不代表客户端没有超时问题.) 1.慢查询参数配置: ·预设阀值怎么设置?(slowlog-log-slower-than) (它的

一个小的java实验

import java.util.*; public class Bank{ public static void main(String []agrs){ //给用户开一个键盘录入的入口 Scanner input = new Scanner (System.in); System.out.print("请输入四位会员卡号:"); //用变量来接收录入的数值 String用input.next() double用input.nextDouble() int num = input.n

Java 开发过程中发现的一个小问题java.lang.NullPointerException

if (detailtable.length > 0) { DetailTable dt = detailtable[i];// 针对每一个明细表遍历 Row[] s = dt.getRow();// 获取每一个明细表的行数组 log.info("明细表长度detail table length:"+s.length);           Common_OA_Detail[]  detailsobject=new Common_OA_Detail[s.length];//根据行

【一个小功能】从js判断ie版本,浅谈navigator对象的appName属性

判断IE版本主要的是获取两个属性,a.当前浏览器名称,b.当前浏览器版本,为此不得不了解navigator对象. 先贴代码 1 window.onload = function() { 2 var browser_name = navigator.appName, //获取当前浏览器的名称 3 browser_version = navigator.appVersion, //获取当前浏览器的平台和版本信息 4 version_arr = browser_version.split(";&quo

appium 学习各种小功能总结--功能有《滑动图片、保存截图、验证元素是否存在、》---新手总结(大牛勿喷,新手互相交流)

1.首页滑动图片点击 1 /** 2 * This Method for swipe Left 3 * 大距离滑动 width/6 除数越大向左滑动距离也越大. 4 * width:720 5 *height:1280 6 * @author Young 7 * @param driver2 8 * @param during 9 */ 10 public void swipeToLeft2(AndroidDriver driver2, int during) { 11 int width =

设计一个小功能

功能描述:为平台公告添加置顶标识 1.前台 书写PRD文档内容如下: 1.描述所要更改页面的详细入口 2.描述你要想修改或者设计的内容,添加原型图(你要修改的内容是什么,你想怎么修改,修改后的后果是什么,能否达到预期,是否满足用户需求) 2.后台 书写PRD文档内容如下:    1.描述后台要修改的模块 2.修改时判断逻辑,罗列优先级,判断哪个功能会第一时间触发,谁是第二时间触发,如果触发,后果是什么,是否是自己设计时想要的结果     3.以上想明白以后,制定文档,书写内容规则 原文地址:ht