用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来发送流和读取流。以及把文件转换成流或把流转换成文件的操作。

posted on 2008-11-22 16:14 cyhjason 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Jason-one/archive/2008/11/22/1339010.html

用Jsp来实现文件下载功能的几种方式相关推荐

  1. 前端实现文件下载功能的三种方式

    一些管理系统常常会有导出文件的功能,这里介绍三种文件下载的尝试 1. 通过文件地址下载文件 此方式最为简易,只需要知道文件在服务器上的地址,就可以通过a标签实现下载 <a href=" ...

  2. 网络虚拟化有几种实现方式_停车场管理系统的防砸车功能有几种方式?如何实现?...

    原标题:停车场管理系统的防砸车功能有几种方式?如何实现? 前言 01 01 正文 一.压力波防砸装置 也叫遇阻防砸,主要是安装遇阻返回装置,当道闸杆下落过程中接触到车辆或者行人(接触力度是可以调节的) ...

  3. C#中关于增强类功能的几种方式

    C#中关于增强类功能的几种方式 本文主要讲解如何利用C#语言自身的特性来对一个类的功能进行丰富与增强,便于拓展现有项目的一些功能. 拓展方法 扩展方法被定义为静态方法,通过实例方法语法进行调用.方法的 ...

  4. 从jsp向servlet传送数据的两种方式

    使用myeclipse开发环境开发web界面,有这么一个需求,需要从一个jsp页面想servlet中传值.有两种传值方式: 第一种: <a href="/Blog/servlet/BM ...

  5. layui导出Excel功能的两种方式的尝试

    第一种方式 利用layui自带的导出功能:在layui文档中有例子和代码 网址:https://www.layui.com/demo/table/parseData.html 只需要在前端界面加入to ...

  6. jsp页面数据加载的两种方式

    JSP数据加载的两种方式 第一种: 三层架构写在controller的页面跳转前面,set到request域中 request.setAttribute("name", list) ...

  7. 从JSP跳转到Servlet的两种方式

    前言 提示:以下是本篇文章正文内容,下面案例可供参考 一.法一 通过response.sendRedirect()进行跳转 1.java代码 代码如下(示例): package kedun.dhy;i ...

  8. xp系统怎样启动搜索服务器,XP系统使用搜索功能的三种方式

    教你怎样找到WinXP搜索?我们的电脑里放了很多文件,如果想要找到自己需要的哪个文件,找起来还真的不好找.那这时候我们就可以用搜索功能来搜索,这样找起来就方便多了.最近有使用WinXP系统的用户,想使 ...

  9. jsp实现页面跳转的几种方式

    一, 使用href超链接标记              (客户端跳转) 二, 提交表单                           (客户端跳转) <form name="fo ...

最新文章

  1. linux 学习 14 日志管理
  2. 利用svn自动同步更新到网站服务器 -- 网摘
  3. MySQL / 多版本并发控制
  4. PHP的ob输出缓冲函数作用
  5. UBUNTU804VirtualBox出现常见问题解决(转高手的)我转的CU的
  6. AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable
  7. 电脑无internet访问_电脑中的代理服务器怎么设置 代理服务器设置方法 - 操作系统...
  8. React开发(172):React引入背景图片
  9. 台达b2伺服modbus通讯_台达C2000促进油毛毡切割包装机的发展
  10. iOS开发-使用Storyboard进行界面跳转及传值
  11. macOS Monterey 兼容哪些 Mac?
  12. LeedCode知识点之位运算
  13. mysql group by rowid_MySQL里面的group by问题浅析
  14. SQL Server 数据库增删改查
  15. Xilinx HLS基础介绍(一)——HLS概念以及接口管理
  16. Jetty开发的相关
  17. JAVA基础学习博客007
  18. STM32F4xx系列使用HAL库配置SPI-读写FLASH
  19. Oracle创建表,id为自增序列
  20. excel中地理坐标经纬度格式调整:保留两位小数

热门文章

  1. Vue项目中跨域的几种方式
  2. 11-Python基础之模块
  3. 计算价格, java中浮点数精度丢失的解决方案
  4. bzoj 3100 排列
  5. HTML5 script元素async,defer异步加载
  6. 关于LateX的应用
  7. maven 简易入门笔记
  8. 软件调试修炼之道之——反思
  9. Swift来了,是不是可以入手IOS开发了?
  10. MethodTrace 生成的trace文件为空