当我请求FileName时,为什么我变为null?

时间:2013-01-17 13:56:35

标签: java html java-ee file-upload enctype

以下 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。

3 个答案:

答案 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}"/>

这应该有所帮助。