前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Javaweb| 文件下载

Javaweb| 文件下载

作者头像
子乾建建-Jeff
发布2020-06-29 14:54:57
1.5K0
发布2020-06-29 14:54:57
举报
文章被收录于专栏:iBroProiBroPro

Javaweb|文件下载

学习web的同学,都知道掌握文件的上传与下载是非常重要的一步。也都习惯了先学习如何上传文件,再进一步了解如何下载文件。

但今天我们反其道而行之,就先来看看如何在网页中实现下载文件。点击下载按钮,就可以把对应资源下载下来。

该方法未进行安全防护与验证,限于新手入门学习掌握。文件的上传尝试过很多种,原生的,基于框架的,自己封装的,后面一一分享。今天就先来看看如何实现下载,在我看来,下载是比较简单的。

首先:你要知道你的文件保存在服务器的位置。(这个地方的路径也是以后上传文件需要注意的地方)没有云服务器没事,你要知道你的tomcat运行起来,项目发布在了哪儿?

默认在你的eclipse安装目录下,

.metadata\.plugins\org.eclipse.wst.server.core\tmp0(或者是tmp1)\wtpwebapps\你的项目。可自己修改;

点开servers后 修改:

前台:通过超链接下载

代码语言:javascript
复制
<a href="${pageContext.request.contextPath}/items/download.action?fileurl=0-material.zip">
下载
</a>

fileurl的值是要下载的文件的名字,有了数据库,可以设置成可变的。

后台:Conteoller

代码语言:javascript
复制
/**

 * 下载文件

 * @param fileurl

 * @param session

 * @param response

 * @throws IOException

 */

@RequestMapping("/download")

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 + "\\images\\" +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();

            }else{

              return;

            }

      }

}

使用文件流的方式将文件下载到本地。

第一步中:

basePath + "\\images\\" +fileurl 就是完整的tomat服务器下的文件的路径与名字

需要下载的0-material在这个路径下。

此时,启动项目,在页面上,点击下载,即可下载到本地。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iBroPro 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档