servlet 文件下载

package com.hkrt.demo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/download.do")
public class Download extends HttpServlet {

	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String passwd = req.getParameter( "passwd" );
//		resp.sendError(HttpServletResponse.SC_NOT_FOUND , "笔记文件");
//		if("123456".equals(passwd)){
			resp.setContentType( "application/pdf" );
			InputStream in = getServletContext().getResourceAsStream("/WEB-INF/ibatis.pdf");
			OutputStream out = resp.getOutputStream();
			writeBytes(in ,out );
//		}
	}
	
	private void writeBytes(InputStream in , OutputStream out) throws IOException{
		byte [] buffer = new byte[ 1024 ];
		int length = -1 ;
		while((length = in.read(buffer))!= -1){
			System.out.println( "lenth == > : " + length );
			out.write(buffer,0,length);
		}
		in.close();
		out.close();
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost( req , resp );
	}
	
}


 

### 如何使用Servlet实现文件下载 为了实现在Web应用程序中通过Servlet进行文件下载的功能,可以创建一个简单的Java Servlet来处理HTTP GET请求并返回指定路径下的文件给客户端浏览器。下面是一个基本的例子说明如何设置这样的Servlet。 #### 创建FileDownloadServlet类 ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/download") public class FileDownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filePath = "C:\\path\\to\\yourfile.ext"; // 文件位置 File downloadFile = new File(filePath); // 设置响应头信息 response.setContentType("application/octet-stream"); response.setContentLength((int) downloadFile.length()); String headerKey = "Content-Disposition"; String headerValue = String.format("attachment; filename=\"%s\"", downloadFile.getName()); response.setHeader(headerKey, headerValue); try (OutputStream outStream = response.getOutputStream(); FileInputStream inputStream = new FileInputStream(downloadFile)) { byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1) { outStream.write(buffer, 0, bytesRead); } } catch (IOException e) { throw new ServletException("IO Error when downloading the file", e); } } } ``` 这段代码定义了一个名为`FileDownloadServlet`的Servlet[^1],它监听URL模式为`/download`的GET请求。当接收到此类请求时,会尝试打开位于服务器上的特定文件,并将其作为二进制数据流发送回客户端。注意这里设置了合适的HTTP头部以便浏览器能够识别这是一个要保存而非显示的内容;同时也指定了建议保存下来的文件名。 对于更复杂的应用场景,比如支持大文件传输、提供进度条反馈或是允许用户暂停和恢复下载等功能,则可能需要用到更加高级的技术栈如Spring Boot所提供的特性[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值