java实现服务器文件下载和网络文件下载

参考链接
本文主要通过i流的方式下载

  1. 普通文件下载
    主要思路是将本地的文件读取到项目中然后获取respons的响应流向响应流中写入本地的文件数据

测试代码

@RequestMapping(value = "/dowloadHtml")
     public String dowloadFileHtml(){
         return "dowloadHtml";
     }

    /**
     * 使用流的方式进行下载
     * @param response
     * @throws IOException
     */
    @RequestMapping(value = "/dowload")
    @ResponseBody
    public void dowload(HttpServletResponse response) throws IOException {
         //下载文件的地址  一般在项目中这个会在数据库中存储这里写死
        String filePath = "D://修改.xls";
        //将文件导入到项目
        File file = new File(filePath);
        //获取文件名
        String fileName = file.getName();
        //获取文件后缀
//        String fileSuffix = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
        //以流的形式下载文件
        InputStream inputStream = new BufferedInputStream(new FileInputStream(filePath));
        //存放文件数据的容器
        byte[] buffer = new byte[inputStream.available()];
        //将流中的数据读入到容器中
        inputStream.read(buffer);
        inputStream.close();
        //清空respont
        response.reset();
        //通过请求头设置文件名
        response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
        response.addHeader("Content-Length", "" + file.length());
        //获取响应的输出流  主要是使用response.getOutputStream 的输出流进行输出
        OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
        response.setContentType("application/octet-stream");
        outputStream.write(buffer);
        outputStream.flush();
        outputStream.close();
    }

2… 网络文件下载
测试代码

/**
     * 使用使用流的方式下载网络文件
     * @param response
     */
    @RequestMapping(value = "/dowloadNet")
    @ResponseBody
    public void dowloadNet(HttpServletResponse response) throws IOException {
        // 下载网络文件
        int bytesum = 0;
         int byteread = 0;
          //文件url
        String fileUrl = "https://www.baidu.com/img/PCdoodle_dce011f4f164006d915e4e122012c428.png";
        URL url = new URL(fileUrl);
        URLConnection urlConnection= url.openConnection();
        InputStream inputStream = urlConnection.getInputStream();
        byte[] bytes = new byte[1024];
        response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode("aa.png", "UTF-8"));
//      response.addHeader("Content-Length", "" + 43603);
        response.setContentType("application/octet-stream");
        OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
        while ((byteread=inputStream.read(bytes)) !=-1) {
            bytesum += byteread;
            outputStream.write(bytes, 0, byteread);
        }
        inputStream.close();
        outputStream.flush();
        outputStream.close();

    } 

html调用代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>下载测试</h3>
<a href="/testuplod/dowload">下载</a>
<br>
<a href="/testuplod/dowloadNet">下载网络文件</a>
</body>
</html>
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值