从jsp上传的文件没有进入servlet

问题描述 投票:0回答:1

我正在尝试从 JSP 上传 csv 文件并在 servlet 请求中使用。我不断在 servlet 中遇到异常,并且该文件似乎没有执行到那么远。

这是我的 JSP 的一部分。我省略了不必要的部分:

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<TABLE>
    <tr>
        <td>
            <form action="CIServlet" method="post">
                <input type="hidden" name="cN"
                       value="<%= request.getAttribute("cN") %>">
                Upload: <input type="file" name="fileName"  enctype="multipart/form data">
                <input type="submit" id="uploadFile" name="uploadFile" value="Upload CSV file">
            </form>
        </td>
    <tr>

</TABLE>
</body>

我的 servlet 看起来像这样:

@WebServlet(name = "CIServlet", value = "/CIServlet")
@MultipartConfig
public class CIServletextends HttpServlet {

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
                Part filePart = request.getPart("fileName");
} catch (IOException e) {
                response.getWriter().write("Failed to process CSV content due to " + e);
            } catch (ServletException e) {

                e.printStackTrace();
            }

当我提交表单时,出现异常:

javax.servlet.ServletException:请求内容类型不是多部分/表单数据

调试时

request.getPart("fileName")
null
。但是,如果我评估
request.getParameter("fileName")
它有文件名。

我希望

request.getPart()
不会是
null
。我在文件输入上使用
enctype="multipart/form data"
。我还在我的 Servlet 上使用
@MultipartConfig
注释。

我还确保我的 JSP 中没有 JavaScript 可以擦除

enctype

java html forms jsp servlets
1个回答
0
投票

属性

enctype="multipart/form data"
应在
<form>
标签上设置,而不是在文件输入上设置。

<form action="CIServlet" enctype="multipart/form data" method="post">
          <input type="hidden" name="cN" value="<%= request.getAttribute("cN") %>">
  Upload: <input type="file" name="fileName">
          <input type="submit" id="uploadFile" name="uploadFile" value="Upload CSV file">
</form>

如果您需要更多信息如何使用 servlet 上传文件,请参阅 Servlet 在上传文件后收到空值

为了能够从请求中获取参数和部分文件,您可以使用

@MultipartConfig
注释:

可以放置在

Servlet
类上的注释,指示 servlet 实例期望请求与类型匹配 MIME 与
multipart/form-data
.

标有

MultipartConfig
的 Servlet 可以检索 给定
Part
请求的
multipart/form-data
组件,调用
getPart()
getParts()

© www.soinside.com 2019 - 2024. All rights reserved.