servlet 实现通过流数据传输下载

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Downloads extends HttpServlet {
private static final long serialVersionUID = 1L;
// 字符编码
private final String ENCODING = "GB2312";
// 内容类型
private final String CONTENT_TYPE = "text/html;charset=gb2312";
// 要下载的文件存放的路径
private String downloadfiledir = "C:\\Users\\786108\\Downloads\\apache-tomcat-7.0.41\\webapps\\uploadFile\\upload\\";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置request对象的字符编码
request.setCharacterEncoding(ENCODING);
// 从request中取出要下载文件的名字
String filename = request.getParameter("filename");
// 判断传输过来的filename是否合法
if (filename == null || filename.trim().equals("")) {
// 设置response对象的ContentType
response.setContentType(CONTENT_TYPE);
// 输出错误信息
PrintWriter out = response.getWriter();
out.println("<font color=red>输入的文件名无效!</font>");
out.close();
} else {
// 下载文件的完整路径名
String fullfilename = downloadfiledir + filename;
System.out.println("下载文件:" + fullfilename);
// 根据文件的类型设置response对象的ContentType
String contentType = getServletContext().getMimeType(fullfilename);
if (contentType == null)
contentType = "application/octet-stream";
response.setContentType(contentType);
// 设置response的头信息
response.setHeader("Content-disposition", "attachment;filename=\""
+ filename + "\"");
InputStream is = null;
OutputStream os = null;
try {
is = new BufferedInputStream(new FileInputStream(fullfilename));
// 定义输出字节流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 定义response的输出流
os = new BufferedOutputStream(response.getOutputStream());
// 定义buffer
byte[] buffer = new byte[4 * 1024]; // 4k Buffer
int read = 0;
// 从文件中读入数据并写到输出字节流中
while ((read = is.read(buffer)) != -1) {
baos.write(buffer, 0, read);
}
// 将输出字节流写到response的输出流中
os.write(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭输出字节流和response输出流
os.close();
is.close();
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 调用doGet()方法
doGet(request, response);
}
}

 

本文出自 “某人说我技术宅” 博客,请务必保留此出处http://1992mrwang.blog.51cto.com/3265935/1243222

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Java中的输入和输出是用于处理数据输入和输出的机制。输入用于从外部读取数据到程序中,而输出用于将程序中的数据写入到外部。 - 输入(InputStream):输入用于从外部数据源(如文件、网络连接等)读取数据到程序中进行处理。它提供了一系列的方法来读取不同类型的数据,如字节、字符、对象等。常见的输入类有 FileInputStream、BufferedInputStream、ObjectInputStream等。 - 输出(OutputStream):输出用于将程序中的数据写入到外部目标(如文件、网络连接等)。它提供了一系列的方法来写入不同类型的数据,如字节、字符、对象等。常见的输出类有 FileOutputStream、BufferedOutputStream、ObjectOutputStream等。 输入和输出的作用是使程序能够与外部环境进行数据交互。通过输入,程序可以读取外部数据并进行处理,例如读取文件内容或从网络接收数据。通过输出,程序可以将内部数据写入到外部,例如将数据保存到文件或通过网络发送数据。 2. 实现数据的保存、传输和展示需要使用适当的技术和工具,这取决于具体的需求和环境。 - 数据保存:要将数据保存到持久性存储介质(如文件、数据库等),可以使用Java的文件操作API或数据库操作API。例如,使用文件操作API可以将数据写入文件,使用数据库操作API可以将数据保存到数据库中。 - 数据传输:要将数据传输到其他系统或网络,可以使用Java的网络编程功能。例如,可以使用Socket或HTTP等协议进行数据传输,使用Java的网络编程API来建立连接、发送和接收数据。 - 数据展示:要展示数据,可以使用Java的图形界面库(如Swing、JavaFX)或Web开发技术。例如,可以使用Swing或JavaFX创建一个桌面应用程序来展示数据,或使用Java的Web开发框架(如Servlet、JSP、Spring MVC等)来创建一个Web应用程序来展示数据。 总之,根据具体需求和环境,可以选择适当的Java技术和工具来实现数据的保存、传输和展示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值