用Jsp来实现文件下载功能的几种方式
1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中。这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。这个就不写示例了。
2.在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。(示例如下)
<% response.setContentType(fileminitype); response.setHeader("Location",filename); response.setHeader("Cache-Control", "max-age=" + cacheTime); //filename应该是编码后的(utf-8) response.setHeader("Content-Disposition", "attachment; filename=" + filename); response.setContentLength(filelength); OutputStream outputStream = response.getOutputStream(); InputStream inputStream = new FileInputStream(filepath); byte[] buffer = new byte[1024]; int i = -1; while ((i = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, i); } outputStream.flush(); outputStream.close(); inputStream.close(); outputStream = null; %> |
3.既然是JSP的话,还有一种方式就是用Applet来实现文件的下载。不过客户首先得信任你的这个Applet小程序,由这个程序来接受由servlet发送来的数据流,并写入到本地。
servlet端示例
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType(" text/plain "); OutputStream outputStream = null; try { outputStream = res.getOutputStream(); //把文件路径为srcFile的文件写入outputStream中 popFile(srcFile, outputStream)) ; } catch (IOException e) { e.printStackTrace(); } } |
JApplet端示例
URLConnection con; try { //url是被调用的SERVLET的网址 如 *.do con = url.openConnection(); con.setUseCaches(false); con.setDoInput(true); con.setDoOutput(true); con.setRequestProperty("Content-Type", "application/octet-stream"); InputStream in = con.getInputStream(); ProgressMonitorInputStream pmInputStream = new ProgressMonitorInputStream (pane, "正在从服务器下载文件内容", in); ProgressMonitor pMonitor = pmInputStream.getProgressMonitor(); pMonitor.setMillisToDecideToPopup(3); pMonitor.setMillisToPopup(3); //localfilepath本地路径,localstr文件文件夹,filename本地文件名 String localfilepath = localstr + filename ; //方法saveFilsaveFilee是把输入流pmInputStream写到文件localfilepath中 if(saveFilsaveFilee(localfilepath,pmInputStream)){ openLocalFile(localfilepath); } |
4.顺便把JApplet上传文件的代码也贴上来.
JApplet端示例
URLConnection con; try { con = url.openConnection(); //url是被调用的SERVLET的网址 如 *.do con.setUseCaches(false); con.setDoInput(true); con.setDoOutput(true); con.setRequestProperty("Content-Type","application/octet-stream"); OutputStream out = con.getOutputStream(); //localfilepath本地路径,localstr文件文件夹,filename本地文件名 String localfilepath = localstr + filename; //文件getOutputStream是把文件localfilepath写到输出流out中 getOutputStream(localfilepath,out); InputStream in = con.getInputStream(); return true; }catch (IOException e) { System.out.println("文件上传出错!"); e.printStackTrace(); } |
servlet端代码示例
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType(" text/plain "); InputStream inputStream = null; try { inputStream = res.getInputStream(); //把输入流inputStream保存到文件路径为srcFile的文件中 writefile(srcFile, inputStream); } catch (IOException e) { e.printStackTrace(); } } // end service |
总结:在文件的传输中是流的形式存在的,在硬盘上是文件的形式存在的。我们要做的只是通过HttpServletRequest和HttpServletResponse,或者是response和request来发送流和读取流。以及把文件转换成流或把流转换成文件的操作。
转载于:https://www.cnblogs.com/Jason-one/archive/2008/11/22/1339010.html
用Jsp来实现文件下载功能的几种方式相关推荐
- 前端实现文件下载功能的三种方式
一些管理系统常常会有导出文件的功能,这里介绍三种文件下载的尝试 1. 通过文件地址下载文件 此方式最为简易,只需要知道文件在服务器上的地址,就可以通过a标签实现下载 <a href=" ...
- 网络虚拟化有几种实现方式_停车场管理系统的防砸车功能有几种方式?如何实现?...
原标题:停车场管理系统的防砸车功能有几种方式?如何实现? 前言 01 01 正文 一.压力波防砸装置 也叫遇阻防砸,主要是安装遇阻返回装置,当道闸杆下落过程中接触到车辆或者行人(接触力度是可以调节的) ...
- C#中关于增强类功能的几种方式
C#中关于增强类功能的几种方式 本文主要讲解如何利用C#语言自身的特性来对一个类的功能进行丰富与增强,便于拓展现有项目的一些功能. 拓展方法 扩展方法被定义为静态方法,通过实例方法语法进行调用.方法的 ...
- 从jsp向servlet传送数据的两种方式
使用myeclipse开发环境开发web界面,有这么一个需求,需要从一个jsp页面想servlet中传值.有两种传值方式: 第一种: <a href="/Blog/servlet/BM ...
- layui导出Excel功能的两种方式的尝试
第一种方式 利用layui自带的导出功能:在layui文档中有例子和代码 网址:https://www.layui.com/demo/table/parseData.html 只需要在前端界面加入to ...
- jsp页面数据加载的两种方式
JSP数据加载的两种方式 第一种: 三层架构写在controller的页面跳转前面,set到request域中 request.setAttribute("name", list) ...
- 从JSP跳转到Servlet的两种方式
前言 提示:以下是本篇文章正文内容,下面案例可供参考 一.法一 通过response.sendRedirect()进行跳转 1.java代码 代码如下(示例): package kedun.dhy;i ...
- xp系统怎样启动搜索服务器,XP系统使用搜索功能的三种方式
教你怎样找到WinXP搜索?我们的电脑里放了很多文件,如果想要找到自己需要的哪个文件,找起来还真的不好找.那这时候我们就可以用搜索功能来搜索,这样找起来就方便多了.最近有使用WinXP系统的用户,想使 ...
- jsp实现页面跳转的几种方式
一, 使用href超链接标记 (客户端跳转) 二, 提交表单 (客户端跳转) <form name="fo ...
最新文章
- linux 学习 14 日志管理
- 利用svn自动同步更新到网站服务器 -- 网摘
- MySQL / 多版本并发控制
- PHP的ob输出缓冲函数作用
- UBUNTU804VirtualBox出现常见问题解决(转高手的)我转的CU的
- AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable
- 电脑无internet访问_电脑中的代理服务器怎么设置 代理服务器设置方法 - 操作系统...
- React开发(172):React引入背景图片
- 台达b2伺服modbus通讯_台达C2000促进油毛毡切割包装机的发展
- iOS开发-使用Storyboard进行界面跳转及传值
- macOS Monterey 兼容哪些 Mac?
- LeedCode知识点之位运算
- mysql group by rowid_MySQL里面的group by问题浅析
- SQL Server 数据库增删改查
- Xilinx HLS基础介绍(一)——HLS概念以及接口管理
- Jetty开发的相关
- JAVA基础学习博客007
- STM32F4xx系列使用HAL库配置SPI-读写FLASH
- Oracle创建表,id为自增序列
- excel中地理坐标经纬度格式调整:保留两位小数