JSP 页面可以通过文件上传下载类代码实现文件上传、下载功能。下面是实现文件上传下载功能的完整攻略:
1. 实现文件上传
1.1. 前端界面
用户通过 JSP 页面上传文件,需要在 JSP 页面中添加文件上传的 HTML 界面:
<form action="upload.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" /><br />
<input type="submit" value="上传文件" />
</form>
其中 action
属性指明表单提交时调用的 JSP 页面,method
属性指定提交方式为 POST,enctype
属性指定表单数据编码方式为 multipart/form-data
,这是用于上传文件的表单编码方式。
1.2. JSP 页面处理上传请求
在 JSP 页面中,处理上传请求的代码如下所示:
<%@ page import="java.util.List, java.util.ArrayList, java.io.File" %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page import="org.apache.commons.fileupload.FileItem" %>
<%
// 上传文件保存目录
String savePath = getServletContext().getRealPath("/WEB-INF/upload");
File saveDir = new File(savePath);
if (!saveDir.exists() && !saveDir.isDirectory()) {
saveDir.mkdir();
}
// 上传文件临时存放目录
String tmpPath = getServletContext().getRealPath("/WEB-INF/tmp");
File tmpDir = new File(tmpPath);
if (!tmpDir.exists() && !tmpDir.isDirectory()) {
tmpDir.mkdir();
}
// 创建上传处理工厂和上传处理器
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(2048); // 设置缓冲区大小
factory.setRepository(tmpDir); // 设置临时文件保存目录
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8"); // 设置文件名编码
// 解析上传请求
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) { // 处理普通表单字段
} else { // 处理上传文件
String fileName = item.getName(); // 获取文件名
long fileSize = item.getSize(); // 获取文件大小
if (fileName == null || fileName.trim().equals("")) {
continue;
}
File uploadedFile = new File(savePath, fileName);
item.write(uploadedFile); // 保存文件到指定目录
}
}
// 跳转到文件列表页面
response.sendRedirect("filelist.jsp");
%>
上面代码中,首先获取上传文件保存目录、临时存放目录。然后创建上传处理工厂和上传处理器,解析上传请求,获取上传的文件名和文件大小,保存文件到指定目录,最后跳转到文件列表页面。
2. 实现文件下载
2.1. JSP 页面处理下载请求
用户通过 JSP 页面下载文件,需要在 JSP 页面中添加文件下载的 HTML 界面:
<ul>
<li><a href="download.jsp?fileName=file1.jpg">file1.jpg</a></li>
<li><a href="download.jsp?fileName=file2.txt">file2.txt</a></li>
<li><a href="download.jsp?fileName=file3.doc">file3.doc</a></li>
</ul>
用户点击链接时,JSP 页面会处理下载请求,代码如下所示:
<%@ page import="java.io.*" %>
<%
String fileName = request.getParameter("fileName");
String path = getServletContext().getRealPath("/WEB-INF/upload/" + fileName);
File file = new File(path);
if (!file.exists()) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
response.setContentType("application/octet-stream");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) > 0) {
os.write(buffer, 0, len);
}
os.flush(); // 刷新缓存
bis.close();
fis.close();
%>
上面代码中,首先获取要下载的文件名和文件路径,如果文件不存在,则返回 404 错误。然后创建文件输入流和输出流,设置响应类型、文件大小和文件名,读取文件内容并输出给客户端,最后关闭流并刷新缓存。
上面就是 JSP 页面实现文件上传下载类代码的完整攻略,可以根据需要修改代码来实现自己需要的文件上传下载功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Jsp页面实现文件上传下载类代码 - Python技术站