在Ubuntu上使用JSP實現文件上傳和下載,你需要遵循以下步驟:
確保你已經安裝了Java、Tomcat、JSP和Servlet。如果沒有,請按照以下命令安裝:
sudo apt update
sudo apt install openjdk-11-jdk
sudo apt install tomcat9
sudo apt install tomcat9-admin
在/var/lib/tomcat9/webapps
目錄下創建一個新的文件夾,例如fileUploadDownload
。在此文件夾中,創建一個名為WEB-INF
的文件夾。在WEB-INF
文件夾中,創建一個名為web.xml
的文件,用于配置Servlet。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>com.example.FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
</web-app>
在fileUploadDownload
文件夾中創建一個名為index.jsp
的文件,用于顯示文件上傳表單:
<!DOCTYPE html>
<html>
<head>
<title>File Upload and Download</title>
</head>
<body>
<h1>Upload File</h1>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" required>
<input type="submit" value="Upload">
</form>
</body>
</html>
在fileUploadDownload
文件夾中創建一個名為FileUploadServlet.java
的文件,用于處理文件上傳和下載請求:
package com.example;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
import org.apache.commons.io.output.*;
@WebServlet(name = "FileUploadServlet", urlPatterns = {"/upload"})
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String UPLOAD_DIRECTORY = "uploads";
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (ServletFileUpload.isMultipartContent(request)) {
try {
List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : multiparts) {
if (!item.isFormField()) {
String name = new File(item.getName()).getName();
item.write(new File(UPLOAD_DIRECTORY + File.separator + name));
response.getWriter().println("File uploaded successfully: " + name);
}
}
} catch (Exception ex) {
response.getWriter().println("File upload failed: " + ex.getMessage());
}
} else {
response.getWriter().println("Request does not contain upload data");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("fileName");
if (fileName == null || fileName.isEmpty()) {
response.getWriter().println("No file name provided");
return;
}
String filePath = UPLOAD_DIRECTORY + File.separator + fileName;
File file = new File(filePath);
if (!file.exists()) {
response.getWriter().println("File not found");
return;
}
response.setContentType("application/octet-stream");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
FileInputStream fileInputStream = new FileInputStream(file);
OutputStream responseOutputStream = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
responseOutputStream.write(buffer, 0, bytesRead);
}
fileInputStream.close();
responseOutputStream.flush();
}
}
將fileUploadDownload
文件夾復制到/var/lib/tomcat9/webapps
目錄下。Tomcat將自動部署應用程序。
在瀏覽器中訪問http://your_server_ip:8080/fileUploadDownload/index.jsp
,你應該能看到文件上傳表單。上傳文件后,可以通過訪問http://your_server_ip:8080/fileUploadDownload/download?fileName=your_file_name
來下載文件。
注意:這個示例使用了Apache Commons FileUpload庫來處理文件上傳。要將其添加到項目中,請下載jar文件并將其放入WEB-INF/lib
目錄下。