以下 HTML 代码段向servlet SendFileName
发出 POST 请求。
<form method="post" action="SendTheFileName" enctype="multipart/form-data">
<div id="Files_to_be_shared">
<input type="file" id="File" name="FileTag" />
<input type="submit" value="Share" />
</div>
</form>
在servlet的 POST 方法中,我尝试通过调用来获取文件名:
String FileName = request.getParameter("FileTag")
但我得到了null
。这是为什么 ?
我正在使用Apache commons进行文件上传。它工作正常。我不知道为什么当enctype是multipart / form-data时我只使用jdk时会得到null。
答案 0 :(得分:1)
Servlet 3.0 API(Java EE 6)提供了访问多部分帖子内容的方法:
参见HttpServletRequest.getParts()
你应该有一个Part
的文件和一个每个参数。
答案 1 :(得分:0)
当您使用enctype="multipart/form-data"
,所有时,表单参数将作为多部分传输。
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
// Process the uploaded form items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
// ** here you get the non-file parameters **
} else {
processUploadedFile(item);
}
}
答案 2 :(得分:0)
你得到null
,因为当form是“multipart / form-data”并且你的输入类型是“file”时,它不会进入HttpServletRequest requestParameterMap()。
您必须使用Java EE 6中的另一个选项,如下所示:
Part filePart = request.getPart("FileTag"); // or "File" - I am not sure
// that not for id value
// you should search
String fileName = filePart.getName();
此外,如果您可以使用JSF而不仅仅是Jave EE Servlets(在JSF 2.2中)是输入类型=“文件”的特殊标记:
<h:inputFile value="#{myFileUploader.file}"/>
这应该有所帮助。