引言
在Web開辟中,文件上傳下載是罕見的須要。利用Servlet技巧,我們可能輕鬆實現這一功能,無需依附第三方庫。本文將具體介紹怎樣利用Servlet停止文件上傳下載,幫助開辟者告別繁瑣操縱。
文件上傳
1. 籌備任務
起首,確保你的項目中曾經包含了Servlet API。假如是Maven項目,可能在pom.xml中增加以下依附:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
2. 編寫上傳頁面
創建一個HTML頁面,包含一個表單用於上傳文件。表單的enctype
屬性設置為multipart/form-data
,確保文件可能以二進制情勢上傳。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上傳</title>
</head>
<body>
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="上傳" />
</form>
</body>
</html>
3. 編寫UploadServlet
創建一個持續自HttpServlet
的類,重寫doPost
方法處理文件上傳懇求。
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 java.io.File;
import java.io.IOException;
import java.io.InputStream;
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 獲取上傳文件的輸入流
InputStream inputStream = request.getPart("file").getInputStream();
// 設置上傳文件的保存道路
String uploadPath = getServletContext().getRealPath("/") + "uploads/";
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdirs();
}
// 獲取上傳文件的文件名
String fileName = request.getPart("file").getSubmittedFileName();
// 創建上傳文件的輸出流
File file = new File(uploadPath + fileName);
java.io.OutputStream outputStream = new java.io.FileOutputStream(file);
// 讀取輸入流,寫入輸出流
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
// 封閉流
outputStream.close();
inputStream.close();
// 前去上傳成功信息
response.getWriter().write("文件上傳成功!");
}
}
4. 設置web.xml
在web.xml中設置UploadServlet。
<web-app>
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
</web-app>
文件下載
1. 編寫下載頁面
創建一個HTML頁面,包含一個表單用於抉擇下載文件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件下載</title>
</head>
<body>
<form action="DownloadServlet" method="post">
<input type="text" name="filename" placeholder="請輸入文件名" />
<input type="submit" value="下載" />
</form>
</body>
</html>
2. 編寫DownloadServlet
創建一個持續自HttpServlet
的類,重寫doPost
方法處理文件下載懇求。
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@WebServlet("/DownloadServlet")
public class DownloadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 獲取下載文件的文件名
String fileName = request.getParameter("filename");
// 設置下載文件的保存道路
String downloadPath = getServletContext().getRealPath("/") + "uploads/";
File file = new File(downloadPath + fileName);
// 設置呼應頭
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// 獲取下載文件的輸出流
ServletOutputStream outputStream = response.getOutputStream();
// 讀取下載文件的輸入流,寫入輸出流
FileInputStream fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
// 封閉流
outputStream.close();
fileInputStream.close();
}
}
3. 設置web.xml
在web.xml中設置DownloadServlet。
<web-app>
<servlet>
<servlet-name>DownloadServlet</servlet-name>
<servlet-class>DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadServlet</servlet-name>
<url-pattern>/DownloadServlet</url-pattern>
</servlet-mapping>
</web-app>
總結
經由過程本文的介紹,信賴你曾經控制了利用Servlet停止文件上傳下載的方法。在現實開辟中,你可能根據須要停止擴大年夜跟優化,比方增加文件大小限制、文件範例限制等。盼望本文能幫助你輕鬆實現文件上傳下載功能。