0

以下HTML片段向 servlet 发出POST请求SendFileName

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

4

3 回答 3

1

Servlet 3.0 API (Java EE 6) 提供了访问多部分帖子内容的方法:

请参阅HttpServletRequest.getParts() 您应该有一个Part用于文件,一个用于每个参数。

于 2013-01-17T18:56:42.850 回答
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);
    }
}
于 2013-01-17T14:55:32.300 回答
0

你得到null是因为当表单是“multipart/form-data”的输入类型并且你的输入类型是“文件”时,它不会进入 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}"/>


这应该会有所帮助。

于 2013-01-17T19:07:59.017 回答