【问题标题】:Trouble with uploading file in servlet [duplicate]在servlet中上传文件时遇到问题[重复]
【发布时间】:2020-08-03 22:39:54
【问题描述】:

我正在学习 Servlet 中的文件上传教程

我的系统配置是

  • 日食
  • Apache Tomcat 8.5
  • JDK:1.8

我的 index.html(表单代码):

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="UploadFileServlet" method="post">
    Select a file to upload 
    <input type="file" value="file" name="source"/> 
    <input type="submit" value="Upload"/>
</form>
</body>
</html>

上传文件Servlet.java:

package com.upload;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletContext;
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 javax.servlet.http.Part;

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


    /**
     * Servlet implementation class UploadFileServlet
     */
    @WebServlet("/UploadFileServlet")
    public class UploadFileServlet extends HttpServlet 
    {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        {
            try
            {
            ServletFileUpload sf=new ServletFileUpload(new DiskFileItemFactory());
            List<FileItem> multFileItems=sf.parseRequest(request);
            System.out.println(multFileItems.isEmpty());
            for(FileItem item:multFileItems)
            {
                item.write(new File("E:\\aman\\"+item.getName()));
            }
            }
            catch(Exception e)
            {
                System.out.println(e);
            }
        }//End of doPost method
    }

我不明白为什么它不起作用。它不会产生任何异常。

预期输出:

我希望这段代码能上传我在e:\aman\文件夹中的表单中选择的文件,但它没有上传任何文件

您可以通过

重现此错误

https://drive.google.com/open?id=1oHnkV5Tmrp2jX8SU6Ilw_EYPWXQbsvv9

【问题讨论】:

  • 您在doPost 中盲目地捕获所有异常。对异常做一些事情可能会有所帮助,例如将其打印到日志中。这样你至少会知道是否发生了异常。
  • 我已经编辑了我的问题。没有发生异常。@DanielBarbarian
  • 那么请在问题中包括发生了什么以及为什么它与您的预期结果不同。
  • 我希望这段代码能在我的 e:\aman\ 文件夹中上传一个文件。但事实并非如此。我已经编辑了我的帖子。 @DanielBarbarian
  • 看这里BallusC。它涵盖了很多你应该研究的东西。

标签: java jsp servlets jakarta-ee file-upload


【解决方案1】:

我更改了 index.html

我加了

enctype="multipart/form-data" 到我的表单

<form action="UploadFileServlet" method="post" enctype="multipart/form-data">

As stated in the HTML specification you have to use the POST method and the enctype attribute of the form has to be set to "multipart/form-data".

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 2010-11-12
    • 1970-01-01
    • 2018-07-29
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多