Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么当我请求文件名时会出现null?_Java_Html_Jakarta Ee_File Upload_Enctype - Fatal编程技术网

Java 为什么当我请求文件名时会出现null?

Java 为什么当我请求文件名时会出现null?,java,html,jakarta-ee,file-upload,enctype,Java,Html,Jakarta Ee,File Upload,Enctype,下面的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" />

下面的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>
但是我得到了
null
。为什么呢


我正在使用Apache commons进行文件上传。它工作得很好。我不知道为什么当enctype是multipart/form data而只使用jdk时,我会得到null。

当您使用
enctype=“multipart/form data”
时,所有的表单参数都作为multipart传输

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);
    }
}
Servlet 3.0 API(Java EE 6)提供了访问多部分文章内容的方法:


您应该为文件设置一个,为每个参数设置一个。

您得到的是
null
,因为当表单的entype为“multipart/form data”且输入类型为“file”时,它不会进入HttpServletRequestParameterMap()中

您必须使用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 servlet(在JSF 2.2中),那么这里有输入type=“file”的特殊标记:




这应该会有帮助。

您必须使用commons file upload或类似的东西来解析请求。请尝试以下链接:@Renjith have to means?为什么它返回
null
?我认为问题在于enctype的b'coz。它是多部分/表单数据。您确定在正确的位置调用该文件吗?尝试使用
“\SendTheFileName”
。当参数不存在时,getParameter
返回null。是否有方法使用jdk获取文件名?上面的方法是使用ApacheCommonsNo,当使用multipart时,浏览器以multipart的形式发送所有内容:文件(数据+文件名)、参数。。。除非您自己编写RFC1867的实现,否则您必须使用一些库来提取每个部分。JavaSE不包括一个。你还没有使用Commons FileUpload吗?我正在使用。但我希望使用jsk来实现。你确定没有办法吗?不确定你的意思。如果您使用的是兼容JEE6的服务器,我添加了另一个答案。
Part filePart = request.getPart("FileTag"); // or "File" - I am not sure 
                                            // that not for id value 
                                            // you should search
String fileName = filePart.getName();
<h:inputFile value="#{myFileUploader.file}"/>