我正在尝试从 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
。
属性
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 实例期望请求与类型匹配 MIME 与Servlet
.multipart/form-data
标有
的 Servlet 可以检索 给定MultipartConfig
请求的Part
组件,调用multipart/form-data
或getPart()
。getParts()