一、上传功能的实现思路
一、上传功能的实现思路
实现上传文件功能的主要思路是:在前端页面添加上传文件的表单,使用Servlet技术获取表单数据和上传的文件,将文件存储到本地磁盘或数据库中。
具体实现步骤:
-
在前端页面中添加上传文件的表单,并设置form的enctype属性为"multipart/form-data",以支持文件上传。
-
创建处理上传请求的Servlet,继承HttpServlet,重写doPost()方法,并使用apache的FileUpload组件处理上传的文件。
-
将上传的文件写入到本地磁盘或存储到数据库中。
二、示例1:上传图片文件功能实现
下面是以上传图片文件为例,实现文件上传功能的具体步骤:
- 在前端页面中添加表单,设置enctype属性为multipart/form-data
<form method="post" action="UploadServlet" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="上传文件" />
</form>
- 创建处理上传请求的Servlet,使用apache的FileUpload组件处理上传的文件。
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传文件的保存地址
String savePath = this.getServletContext().getRealPath("/upload");
// 检查目录是否存在,如果不存在则创建
File file = new File(savePath);
if(!file.exists() && !file.isDirectory()) {
file.mkdir();
}
// 创建DiskFileItemFactory工厂对象
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 1024); // 设置缓冲区大小
factory.setRepository(file); // 设置文件临时存储目录
// 创建ServletFileUpload对象,并设置上传文件的大小限制
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(10 * 1024 * 1024); // 设置上传文件的大小限制为10M
try {
// 解析request对象,并获取上传文件集合
List<FileItem> items = upload.parseRequest(request);
for(FileItem item : items) {
// 判断当前item是否是上传文件
if(!item.isFormField()) {
// 获取上传文件名
String fileName = item.getName();
// 将上传文件保存到指定目录
item.write(new File(savePath, fileName));
}
}
// 跳转到上传成功页面
request.getRequestDispatcher("/success.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
// 跳转到上传失败页面
request.getRequestDispatcher("/error.jsp").forward(request, response);
}
}
}
- 在指定目录下查看上传的图片文件,代码如下:
@WebServlet("/ShowImageServlet")
public class ShowImageServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传文件的保存地址
String savePath = this.getServletContext().getRealPath("/upload");
String fileName = request.getParameter("fileName"); // 获取要查看的图片文件名
// 读取本地磁盘上的图片文件
File file = new File(savePath + File.separator + fileName);
if(file.exists()) {
// 设置响应头,输出图片到页面中
response.setContentType("image/png");
FileInputStream inputStream = new FileInputStream(file);
OutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int length = 0;
while((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
}
}
}
- 在JSP页面中展示上传的图片文件,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.File" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.Collections" %>
<%@ page import="java.util.List" %>
<html>
<head>
<title>上传成功</title>
</head>
<body>
<h3>上传成功</h3>
<% String savePath = request.getServletContext().getRealPath("/upload");
File file = new File(savePath);
List<String> fileNameList = Arrays.asList(file.list());
Collections.reverse(fileNameList); // 将文件列表倒序排列
for(String fileName : fileNameList) {
if(fileName.endsWith(".png") || fileName.endsWith(".jpg")) { %>
<img src="ShowImageServlet?fileName=<%= fileName%>" />
<% }
} %>
</body>
</html>
以上代码实现了上传图片文件的功能,用户在前端页面选择图片文件并上传,上传成功后在jsp页面中展示上传的图片,并通过ShowImageServlet显示图片文件。
三、示例2:上传普通文件实现
以下是以上传普通文件为例,实现文件上传的代码:
- 在前端页面中添加表单,设置enctype属性为multipart/form-data
<form method="post" action="UploadServlet" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="上传文件" />
</form>
- 创建处理上传请求的Servlet,使用apache的FileUpload组件处理上传的文件。
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传文件的保存地址
String savePath = this.getServletContext().getRealPath("/upload");
// 检查目录是否存在,如果不存在则创建
File file = new File(savePath);
if(!file.exists() && !file.isDirectory()) {
file.mkdir();
}
// 创建DiskFileItemFactory工厂对象
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 1024); // 设置缓冲区大小
factory.setRepository(file); // 设置文件临时存储目录
// 创建ServletFileUpload对象,并设置上传文件的大小限制
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(10 * 1024 * 1024); // 设置上传文件的大小限制为10M
try {
// 解析request对象,并获取上传文件集合
List<FileItem> items = upload.parseRequest(request);
for(FileItem item : items) {
// 判断当前item是否是上传文件
if(!item.isFormField()) {
// 获取上传文件名
String fileName = item.getName();
// 将上传文件保存到指定目录
item.write(new File(savePath, fileName));
}
}
// 跳转到上传成功页面
request.getRequestDispatcher("/success.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
// 跳转到上传失败页面
request.getRequestDispatcher("/error.jsp").forward(request, response);
}
}
}
- 在jsp页面中展示上传的文件,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.File" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.Collections" %>
<%@ page import="java.util.List" %>
<html>
<head>
<title>上传成功</title>
</head>
<body>
<h3>上传成功</h3>
<% String savePath = request.getServletContext().getRealPath("/upload");
File file = new File(savePath);
List<String> fileNameList = Arrays.asList(file.list());
Collections.reverse(fileNameList); // 将文件列表倒序排列
for(String fileName : fileNameList) {
if(!fileName.endsWith(".png") && !fileName.endsWith(".jpg")) { %>
<p>文件名:<%= fileName %></p>
<% }
} %>
</body>
</html>
以上代码实现了上传普通文件的功能,用户在前端页面选择文件并上传,上传成功后在jsp页面中展示上传的文件名称。
总结:
通过以上两个示例,我们可以实现文件上传功能的代码实现,共同点是都需要用到apache的FileUpload组件来处理上传的文件,不同之处在于具体处理方式的不同。在此基础上,可以根据项目需要进行具体的扩展和改进。
本文标题为:Servlet+Jsp实现图片或文件的上传功能具体思路及代码
基础教程推荐
- Java中的接口及其应用场景解读 2023-07-14
- SpringBoot如何使用自定义注解实现接口限流 2022-12-07
- Java实现可配置换肤的方法示例 2023-01-08
- Eureka源码阅读之环境搭建及工程结构 2023-06-11
- swagger文档增强工具knife4j使用图文详解 2022-09-03
- Java实现简单学生管理系统 2023-03-16
- 如何使用离线和在线数据库创建Java桌面应用程序,定期同步? 2023-11-03
- 使用maven方式创建springboot项目的方式 2023-06-01
- springboot整合RabbitMQ 中的 TTL实例代码 2023-06-02
- 使用SpringBoot+EasyExcel+Vue实现excel表格的导入和导出详解 2023-04-23