java 下载文件

前台传过来文件路径,从后台获取文件

后台代码


    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.BufferedInputStream;
    import java.io.OutputStream;
    import java.io.BufferedOutputStream;

    @ResponseBody
    @RequestMapping(value = "app/file")
    public void getFile(String fileurl,  HttpSession session, HttpServletResponse response)
            throws IOException {
        String basePath = session.getServletContext().getRealPath("/"); // 获取基本路径    
        if (null!==fileurl && !fileurl.equals("")) {
            /* 第一步:根据文件路径获取文件 */
            File file = new File(basePath + fileurl);
            if (file.exists()) { // 文件存在
                /* 第二步:根据已存在的文件,创建文件输入流 */
                InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
                /* 第三步:创建缓冲区,大小为流的最大字符数 */
                byte[] buffer = new byte[inputStream.available()]; // int available() 返回值为流中尚未读取的字节的数量
                /* 第四步:从文件输入流读字节流到缓冲区 */
                inputStream.read(buffer);
                /* 第五步: 关闭输入流 */
                inputStream.close();

                String fileName = file.getName();// 获取文件名
                response.reset();
                response.addHeader("Content-Disposition",
                        "attachment;filename=" + new String(fileName.getBytes("utf-8"), "iso8859-1"));
                response.addHeader("Content-Length", "" + file.length());

                /* 第六步:创建文件输出流 */
                OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
                response.setContentType("application/octet-stream");
                /* 第七步:把缓冲区的内容写入文件输出流 */
                outputStream.write(buffer);
                /* 第八步:刷空输出流,并输出所有被缓存的字节 */
                outputStream.flush();
                /* 第九步:关闭输出流 */
                outputStream.close();

            } //end  if (file.exists())
        } else {

            return;
        }



    }

前台测试
这里写图片描述

测试结果
这里写图片描述

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值