java - 如何使用 JSP 和 Servlet 在 Java 中上传文件?

标签 java jsp servlets

我正在我的本地主机上创建一个简单的 Web 应用程序。我有一个像这样的表格:

<form method="post" enctype="multipart/form-data" action="UploadFile">
    File:
    <input type="file" name="file" id="file" />
    Submit Button:
    <input type="submit" value="upload"/>
</form>

不是我的确切形式,但你明白了。 UploadFile(即action =“UploadFile”)是一个Servlet。现在我知道我想要将文件上传到的路径。为了论证起见,假设路径如下:

String path = "Project\\web\\files\\";
//I want the file to be put into this folder.

那么我该如何处理将当前桌面上的文件上传到我刚刚编写的路径。

我使用Java已经有一段时间了,但以前从未做过文件上传。我在网上查看了一些解决方案,与使用其他编程语言处理文件上传的简单相比,这些解决方案似乎非常复杂。

上传此文件的最佳方式是什么。

最佳答案

添加以下 jar 文件

commons-collections-3.1.jar

commons-fileupload-1.2.2.jar

commons-io-2.1.jar

commons-logging-1.0.4.jar

Jsp页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
       pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>File Upload</title>
</head>
<body>
<form method="post" action="UploadServlet" enctype="multipart/form-data">
Select file to upload:
<input type="file" name="file" id="file"/><br/><br/>
<input type="submit" value="Upload" />
</form>
</body>
</html>

servlet 代码

package com.servlet;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class UploadServlet
 */
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private static final String DATA_DIRECTORY = "data";
    private static final int MAX_MEMORY_SIZE = 1024 * 1024 * 2;
    private static final int MAX_REQUEST_SIZE = 1024 * 1024;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // Check that we have a file upload request
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);

        if (!isMultipart) {
            return;
        }

        // Create a factory for disk-based file items
        DiskFileItemFactory factory = new DiskFileItemFactory();

        // Sets the size threshold beyond which files are written directly to
        // disk.
        factory.setSizeThreshold(MAX_MEMORY_SIZE);

        // Sets the directory used to temporarily store files that are larger
        // than the configured size threshold. We use temporary directory for
        // java
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));

        // constructs the folder where uploaded file will be stored
        String uploadFolder = getServletContext().getRealPath("")
                + File.separator + DATA_DIRECTORY;

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);

        // Set overall request size constraint
        upload.setSizeMax(MAX_REQUEST_SIZE);

        try {
            // Parse the request
            List items = upload.parseRequest(request);
            Iterator iter = items.iterator();
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();

                if (!item.isFormField()) {
                    String fileName = new File(item.getName()).getName();
                    String filePath = uploadFolder + File.separator + fileName;
                    File uploadedFile = new File(filePath);
                    System.out.println(filePath);
                    // saves the file to upload directory
                    item.write(uploadedFile);
                }
            }

            // displays done.jsp page after upload finished
            getServletContext().getRequestDispatcher("/done.jsp").forward(
                    request, response);

        } catch (FileUploadException ex) {
            throw new ServletException(ex);
        } catch (Exception ex) {
            throw new ServletException(ex);
        }

    }

}

你的 web.xml 应该是这样的

 <servlet>
    <description></description>
    <display-name>UploadServlet</display-name>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>com.servlet.UploadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/UploadServlet</url-pattern>
  </servlet-mapping>

关于java - 如何使用 JSP 和 Servlet 在 Java 中上传文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40924453/

相关文章:

java - 检查字符串中给定字符出现的次数

java - 为什么我的 libGDX TextureAtlas 无法正确渲染 spritesheet 纹理?

java - jsp异常错误

java - 使用注释一对多不添加列(hibernate)

java - 多线程环境下的 Shiro

java - 从扫描仪读取并跳过空格

java - 从 txt 文件名(一个单词)和(整数)中读取输入。将包含年龄和姓名的列表写入输出文件

java - 如何重写java web应用程序中的url?

java - 创建多个 InternalResourceViewResolver

java - 物化和交易