我需要将文件上传到在 tomcat 上运行的 servlet。除了文件之外,我还想允许用户添加与上传的文件关联的评论。我尝试了以下方法,但没有成功:
<form action='MyUploadServlet' enctype='multipart/form-data' method='POST'>
<input type='file' name='filechooser'><br />
<textarea name='comment' cols='15' rows='5'></textarea>
<input type='Submit' value='Upload'><br />
</form>
这是服务器端代码的片段:
@WebServlet("/MyUploadServlet")
public class MyUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
ServletContext sc = request.getServletContext();
String comment = (String)request.getParameter("comment");
....etc}
服务器代码的省略部分处理接收上传文件的内容。
上面的 request.getParameter("comment") 行返回 null。
我在我的应用程序中使用了多个 servlet 和多个表单。在所有其他地方,如果我使用 request.getParameter("form-input-name"),我总是会获得相应输入字段的值。这是唯一的例外,即当表单具有“文件”类型的输入字段时。
如何随文件上传提交一起传递评论?
您需要通过以下方式获取文本字段值same您用来获取上传文件内容的 API。
您已指定要发送数据的 HTML 表单multipart/form-data
编码而不是标准application/x-www-form-urlencoded
编码。这multipart/form-data
为了将文件内容与表单提交一起发送,编码是必需的。但是,那getParameter()
方法结合使用application/x-www-form-urlencoded
only.
A multipart/form-data
请求通常被解析为multipart/form-data
解析器,例如众所周知的Apache Commons 文件上传 http://commons.apache.org/fileupload,这是该领域事实上的标准。但是,自从 Servlet 3.0(您似乎正在实际使用它,考虑到 Servlet 3.0 中还引入了@WebServlet http://docs.oracle.com/javaee/6/api/javax/servlet/annotation/WebServlet.html注释),有一个新的getParts() http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getParts%28%29方法,允许您使用标准方法提取必要的提交数据,而不需要 Apache Commons FileUpload。然而,它仍然只比 Apache Commons FileUpload 更详细一点。您可以在此答案中找到这两种方法的具体示例:如何使用JSP/Servlet上传文件到服务器? https://stackoverflow.com/questions/2422468/how-to-upload-files-in-jsp-servlet/2424824#2424824
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)