Java文件上传获取相对路径和绝对路径实现步骤
1. 创建一个文件上传表单页面
首先,我们需要创建一个HTML页面,其中包含一个文件上传表单,用于用户选择要上传的文件。可以使用以下代码创建一个简单的文件上传表单页面:
<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="上传" />
</form>
</body>
</html>
这段代码创建了一个包含一个文件选择框和一个上传按钮的表单。action
属性指定了要将表单数据提交到的服务器端URL,method
属性设置为"post"表示使用POST请求提交表单数据,enctype
属性设置为"multipart/form-data"表示表单数据中包含文件。
2. 创建文件上传处理的Java Servlet
Java Servlet是一种用于处理HTTP请求的Java类。我们需要创建一个Servlet,用于接收文件上传请求,并将上传的文件保存到服务器端。
首先,创建一个Java类,继承自javax.servlet.http.HttpServlet
,并重写doPost
方法。可以使用以下代码创建一个简单的文件上传Servlet:
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上传文件的Part对象
Part filePart = request.getPart("file");
// 生成唯一的文件名
String fileName = UUID.randomUUID().toString();
// 获取服务器上的绝对路径
String absolutePath = getServletContext().getRealPath("/");
// 创建保存文件的目录
String uploadPath = absolutePath + File.separator + "uploads";
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
// 将文件保存到服务器端
String filePath = uploadPath + File.separator + fileName;
filePart.write(filePath);
// 获取文件的相对路径
String relativePath = request.getContextPath() + "/uploads/" + fileName;
// 将相对路径和绝对路径返回给客户端
response.getWriter().println("文件的相对路径:" + relativePath);
response.getWriter().println("文件的绝对路径:" + filePath);
}
}
在上面的代码中,我们首先获取了上传文件的Part对象,通过request.getPart("file")
方法可以根据name
属性获取到文件的Part对象。
然后,我们生成一个唯一的文件名,这里使用了java.util.UUID
工具类生成一个随机的UUID作为文件名。
接下来,使用getServletContext().getRealPath("/")
方法获取服务器上的绝对路径。
然后,我们创建一个保存文件的目录,这里创建了一个名为"uploads"的目录。
使用filePart.write(filePath)
将文件保存到服务器端的指定路径。
最后,我们通过request.getContextPath()
获取应用的上下文路径,然后拼接上"uploads/"和文件名,得到文件的相对路径。
3. 配置Web项目的部署描述符
我们需要在Web项目的部署描述符(web.xml)中配置Servlet的映射和上传文件的临时存储路径。
在WEB-INF
目录下创建一个名为web.xml
的文件,添加以下配置:
<web-app xmlns="
xmlns:xsi="
xsi:schemaLocation="
version="4.0">
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.example.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
<multipart-config>
<location>/tmp</location>
<max-file-size>20848820</max-file-size>
<max-request-size>418018841</max-request-size>
<file-size-threshold>1048576</file-size-threshold>
</