Java上传下载完全解析(二)

上一篇我们分析了Java Web中的上传开发: Java上传下载完全解析(一) ,今天我们研究一下Java Web的下载与文件位置配置信息在开发与生产环境中的切换方法。


一、文件下载

  文件下载其实非常简单,首先我们根据请求的信息得到文件的名称,然后根据文件位置进行拼接得到具体的文件路径。然后我们只需要在HttpServletResponse中得到文件的输出流,并从文件系统中读取信息放到输出流即可。

  在工程中,首先我们会有一个文件的基础地址信息,比如为/data/dev,那么我在上传一个xx.txt文件时,上传时我会先得到其后缀,然后生成一个随机的文件名并加上其后缀,比如7eec46bcc65a21cbe293726eaa9175cf.txt,那么其最终地址为/data/dev/7eec46bcc65a21cbe293726eaa9175cf.txt,这样,上传时就将其保存到此路径下。

  同样的道理,下载的时候,需要告诉我需要下载的文件名为7eec46bcc65a21cbe293726eaa9175cf.txt,这样就可以得到其路径为/data/dev/7eec46bcc65a21cbe293726eaa9175cf.txt,然后就可以得到文件流并进行下载了。

  还有一点需要注意的是,假如我们下载的时候,假设地址为http://localhost:8080/download/xxx.txt,那么下载的地址前缀即为http://localhost:8080/download/,所以在上传的时候,得到文件名后,需要给客户端返回此文件的下载路径,比如文件名为7eec46bcc65a21cbe293726eaa9175cf.txt,那么返回给客户端的下载路径即为http://localhost:8080/7eec46bcc65a21cbe293726eaa9175cf.txt。

  下面贴代码,注意@RequestMapping("/download/{fileName:.+}")中最后必须加入.+,否则.txt .xml这些后缀是获取不到的:

  

    @RequestMapping("/download/{fileName:.+}")
    public void download(@PathVariable String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception   {
  
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        //获取下载文件露肩
        String downLoadPath = filePath + fileName;
        //获取文件的长度
        long fileLength = new File(downLoadPath).length();
        //设置文件输出类型
        response.setHeader("Content-disposition", "attachment; filename="
                + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
        //设置输出长度
        response.setHeader("Content-Length", String.valueOf(fileLength));
        //获取输入流
        bis = new BufferedInputStream(new FileInputStream(downLoadPath));
        //输出流
        bos = ne
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值