(1) 该功能的实现步骤如下: (1)创建下载页面download.jsp。 <%@ page language="java" contentType="text/html; charset=UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>文件下载</title> </head> <body> <a href="http://localhost:8080/chapter09/DownloadServlet?filename=1.png"> 文件下载</a> </body> </html> (2)编写DownloadServlet类,该类主要用于设置所要下载的文件以及文件在浏览器中的打开方式,并使用 encode(String s, String enc)方法,将URL中的字符串以指定的编码形式输出,防止文件名出现中文乱码问 题。 import java.io.*; import java.net.URLEncoder; import javax.servlet.*; import javax.servlet.http.*; public class DownloadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); // 获得绝对路径创建文件对象 String path=getServletContext().getRealPath("/download/1.png"); File file=new File(path); // 通知浏览器以下载的方式打开文件 response.addHeader("Content-Type", "application/octet-stream"); response.addHeader("Content-Disposition","attachment;filename=" +URLEncoder.encode(file.getName(),"utf-8")); // 通过文件对象获取文件相关的输入流 InputStream in=new FileInputStream(file); // 获取response对象的输出流 OutputStream out = response.getOutputStream(); byte [] buffer=new byte[1024]; int len; while((len=in.read(buffer))!=-1){ out.write(buffer,0,len); } } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }
时间: 2024-04-04 21:33:59 浏览: 128
这段代码是一个简单的文件下载功能的实现,主要包括两个部分:
1. download.jsp页面:该页面包含一个超链接,指向DownloadServlet,并传递了所要下载的文件名(这里是1.png)。
2. DownloadServlet类:该类继承自HttpServlet,通过doGet方法实现文件下载的功能。具体步骤如下:
- 获取所要下载的文件的绝对路径,创建文件对象。
- 设置响应头,告诉浏览器以下载的方式打开文件,并指定文件名。
- 获取文件的输入流,将文件内容输出到响应的输出流中,完成文件下载。
值得注意的是,为了防止文件名出现中文乱码问题,需要使用URLEncoder.encode方法对文件名进行编码处理。
相关问题
javaweb采用绝对路径实现可以选择本地文件并下载到本地文件目录 jsp代码,servlet代码
以下是一个简单的 JSP 页面和对应的 Servlet,用于实现在 JavaWeb 中选择本地文件并下载到本地文件目录:
JSP 页面代码(`index.jsp`):
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaWeb 文件下载</title>
</head>
<body>
<h1>请选择要下载的文件:</h1>
<form action="download" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<br>
<input type="submit" value="下载">
</form>
</body>
</html>
```
Servlet 代码(`DownloadServlet.java`):
```java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上传的文件
Part filePart = request.getPart("file");
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
// 构造文件保存路径
String savePath = "C:/temp/" + fileName;
Path saveFile = Paths.get(savePath);
// 将上传的文件保存到本地
try (InputStream in = filePart.getInputStream();
OutputStream out = Files.newOutputStream(saveFile)) {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
}
// 向客户端发送文件
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
try (InputStream in = Files.newInputStream(saveFile);
OutputStream out = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
}
}
}
```
说明:
1. 在 JSP 页面中,通过 `<input type="file">` 元素实现了选择本地文件的功能。
2. 在 Servlet 中,通过 `request.getPart("file")` 获取上传的文件,然后将其保存到本地文件目录中。
3. 最后,通过设置响应的 Content-Type 和 Content-Disposition,将保存的文件发送给客户端进行下载。
阅读全文