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>
    </