在本文中,我将讨论如何在 servlet 中上传和下载文件到服务器。在本文的最后,您将了解如何在基于 Servlet 的 Java Web 应用程序中设置文件上传和文件下载功能。作为本示例的一部分,我们创建了以下文件:
- fileupload.jspallfiles.jspfileuploadResponse.jspUploadDetail.javaFileUploadServlet.javaUploadedFileServlet.javaFileDownloadServlet.javaweb.xmlmain.css
UploadDetail.java是一个 POJO 类,用于存储上传的文件状态,即文件名、文件状态和文件上传状态。FileUploadServlet.java是一个用于上传文件的控制器类。servlet 使用带有文件大小阈值、最大文件大小和最大请求大小的 @Multipartconfig 注释进行注释。UploadedFileServlet.java是一个控制器类,用于显示已经上传到服务器的文件。FileDownloadServlet.java用于从服务器下载文件。
fileupload.jsp页面包含上传单个文件或多个文件的上传表单。FileUploadResponse.jsp页面用于显示上传文件的结果。在这个JSP中,我们遍历uploadDetail对象列表,打印上传文件信息的表格数据。此外,在此页面上,我们创建了最后一列作为上传文件的下载链接。allfiles.jsp页面用于显示驻留在服务器上的文件总数的结果。web.xml是一个部署描述符,包含有关 servlet 的信息。main.css是用于描述文档外观和格式的样式表。
fileupload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Servlet File Upload/Download
:
Please Upload A File!
/uploadedFilesServlet">List all uploaded files
allfiles.jsp
<%@page import="java.util.List"%>
<%@page import="com.jcg.servlet.UploadDetail"%>
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Servlet File Upload/Download
File Name File Size Action
<% List uploadDetails = (List) request.getAttribute("uploadedFiles");
if (uploadDetails != null && uploadDetails.size() > 0) {
for (int i = 0; i < uploadDetails.size(); i++) {
%>
<%=uploadDetails.get(i).getFileName()%>
<%=uploadDetails.get(i).getFileSize()%> KB
/downloadServlet?fileName=<%=uploadDetails.get(i).getFileName()%>">Download
<% }
} else { %>
No Files Uploaded.....!
<% }%>
/fileupload.jsp">Back
fileuploadResponse.jsp
<%@page import="java.util.List"%>
<%@page import="com.servlet.UploadDetail"%>
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Servlet File Upload/Download
File Name File Size Upload Status Action
<% List uploadDetails = (List) request.getAttribute("uploadedFiles");
for (int i = 0; i < uploadDetails.size(); i++) {
%>
<%=uploadDetails.get(i).getFileName()%>
<%=uploadDetails.get(i).getFileSize()%> KB
<%=uploadDetails.get(i).getUploadStatus()%>
/downloadServlet?fileName=<%=uploadDetails.get(i).getFileName()%>">Download
<% }%>
/fileupload.jsp">Back
UploadDetail.java
package com.servlet;
import java.io.Serializable;
public class UploadDetail implements Serializable {
private long fileSize;
private String fileName, uploadStatus;
private static final long serialVersionUID = 1L;
public long getFileSize() {
return fileSize;
}
public void setFileSize(long fileSize) {
this.fileSize = fileSize;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getUploadStatus() {
return uploadStatus;
}
public void setUploadStatus(String uploadStatus) {
this.uploadStatus = uploadStatus;
}
}
FileUploadServlet.java
package com.servlet;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
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(description = "Upload File To The Server", urlPatterns = {"/fileUploadServlet"})
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 10, maxFileSize = 1024 * 1024 * 30, maxRequestSize = 1024 * 1024 * 50)
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final String UPLOAD_DIR = "uploadedFiles";
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
handleRequest(request, response);
}
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String applicationPath = getServletContext().getRealPath(""),
uploadPath = applicationPath + File.separator + UPLOAD_DIR;
File fileUploadDirectory = new File(uploadPath);
if (!fileUploadDirectory.exists()) {
fileUploadDirectory.mkdirs();
}
String fileName = "";
UploadDetail details = null;
List fileList = new ArrayList();
for (Part part : request.getParts()) {
fileName = extractFileName(part);
details = new UploadDetail();
details.setFileName(fileName);
details.setFileSize(part.getSize() / 1024);
try {
part.write(uploadPath + File.separator + fileName);
details.setUploadStatus("Success");
} catch (IOException ioObj) {
details.setUploadStatus("Failure : " + ioObj.getMessage());
}
fileList.add(details);
}
request.setAttribute("uploadedFiles", fileList);
RequestDispatcher dispatcher = request.getRequestDispatcher("/fileuploadResponse.jsp");
dispatcher.forward(request, response);
}
private String extractFileName(Part part) {
String fileName = "",
contentDisposition = part.getHeader("content-disposition");
String[] items = contentDisposition.split(";");
for (String item : items) {
if (item.trim().startsWith("filename")) {
fileName = item.substring(item.indexOf("=") + 2, item.length() - 1);
}
}
return fileName;
}
}
UploadedFilesServlet.java
package com.servlet;
import com.servlet.UploadDetail;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
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(description = "List The Already Uploaded Files", urlPatterns = {"/uploadedFilesServlet"})
public class UploadedFilesServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final String UPLOAD_DIR = "uploadedFiles";
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
handleRequest(request, response);
}
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String applicationPath = getServletContext().getRealPath(""),
uploadPath = applicationPath + File.separator + UPLOAD_DIR;
File fileUploadDirectory = new File(uploadPath);
if (!fileUploadDirectory.exists()) {
fileUploadDirectory.mkdirs();
}
UploadDetail details = null;
File[] allFiles = fileUploadDirectory.listFiles();
List fileList = new ArrayList();
for (File file : allFiles) {
details = new UploadDetail();
details.setFileName(file.getName());
details.setFileSize(file.length() / 1024);
fileList.add(details);
}
request.setAttribute("uploadedFiles", fileList);
RequestDispatcher dispatcher = request.getRequestDispatcher("/allfiles.jsp");
dispatcher.forward(request, response);
}
}
FileDownloadServlet.java
package com.servlet;
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(description = "Download File From The Server", urlPatterns = {"/downloadServlet"})
public class FileDownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static int BUFFER_SIZE = 1024 * 100;
public static final String UPLOAD_DIR = "uploadedFiles";
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
handleRequest(request, response);
}
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("fileName"),
applicationPath = getServletContext().getRealPath(""),
downloadPath = applicationPath + File.separator + UPLOAD_DIR,
filePath = downloadPath + File.separator + fileName;
File file = new File(filePath);
OutputStream outStream = null;
FileInputStream inputStream = null;
if (file.exists()) {
String mimeType = "application/octet-stream";
response.setContentType(mimeType);
String headerKey = "Content-Disposition";
String headerValue = String.format("attachment; filename="%s"", file.getName());
response.setHeader(headerKey, headerValue);
try {
outStream = response.getOutputStream();
inputStream = new FileInputStream(file);
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
} catch (IOException ioExObj) {
System.out.println("Exception While Performing The I/O Operation?= " + ioExObj.getMessage());
} finally {
if (inputStream != null) {
inputStream.close();
}
outStream.flush();
if (outStream != null) {
outStream.close();
}
}
} else {
response.setContentType("text/html");
response.getWriter().println("File " + fileName + " Is Not Present .....!");
}
}
}
web.xml
Servlet File Upload/Download fileupload.jsp
main.css
* {
box-sizing: border-box;
}
.margin_top_15px {
margin-top: 15px;
}
.panel {
display: block;
padding: 15px;
border: 1px solid #c0c0c0;
width: 849px;
margin: 52px 0px 0px 32px;
}
label {
display: inline-block;
margin-bottom: 5px;
}
.form_group {
margin: 10px;
}
.btn_primary {
color: #fff;
background-color: #0275d8;
border-color: #0275d8;
}
.btn {
display: inline-block;
padding: 10px;
text-align: center;
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
border: 1px solid transparent;
}
.input_error {
color: #DE3330;
padding: 5px;
}
.bordered_table {
border-collapse: collapse;
width: 100%;
table-layout: fixed;
}
.bordered_table tr,th,td {
border: 1px solid #333;
}
.bordered_table th,td {
padding: 5px;
}
.bordered_table td {
word-wrap: break-word;
}
#noFiles {
color: red;
font-size: larger;
}
.hyperlink {
text-decoration: none;
cursor: pointer;
}
Output
运行您的代码以获得以下输出。点击“选择文件”,选择要上传的文件,然后点击“上传”按钮。单击“列出所有上传的文件”链接以查看已上传文件的列表。
单击“上传”按钮后,您将收到以下响应。按“返回”链接返回文件上传页面。
单击“列出所有上传的文件”链接后,您将收到以下响应。单击“下载”链接以下载特定文件。
下载特定文件后,您将在此 PC -> 下载选项中找到该文件。
在本文中,我们开发了一个在 servlet 中上传和上传文件到服务器的应用程序,希望您喜欢这篇如何在 servlet 中上传和下载文件到服务器的文章。



