Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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/0/search/2.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
在JSP/Servlet中使用Apache commans文件上载API时出现文件上载问题_Jsp_Servlets - Fatal编程技术网

在JSP/Servlet中使用Apache commans文件上载API时出现文件上载问题

在JSP/Servlet中使用Apache commans文件上载API时出现文件上载问题,jsp,servlets,Jsp,Servlets,我正在尝试使用org.apache.commons.fileupload上传一个文件。但是我不知道,我犯了什么错误,我的servlet中出现了以下错误。请任何人帮我这是我得到的错误 javax.servlet.ServletException: Servlet execution threw an exception root cause java.lang.NoClassDefFoundError: org/apache/commons/io/output/Deferre

我正在尝试使用org.apache.commons.fileupload上传一个文件。但是我不知道,我犯了什么错误,我的servlet中出现了以下错误。请任何人帮我这是我得到的错误

     javax.servlet.ServletException: Servlet execution threw an exception


 root cause 

 java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
upload1.doPost(upload1.java:34)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
这是我的servlet代码

   if (ServletFileUpload.isMultipartContent(req)) {

         // Create a factory for disk-based file items
         FileItemFactory factory = new DiskFileItemFactory();

         // Create a new file upload handler
         ServletFileUpload upload = new ServletFileUpload(factory);

         // Parse the request
         try {
             List<FileItem> items = upload.parseRequest(req);
             for (FileItem item : items) {
                 // process only file upload - discard other form item types
                 if (item.isFormField()) continue;

                 String fileName = item.getName();
                 // get only the file name not whole path
                 if (fileName != null) {
                    // fileName = FilenameUtils. getName(fileName);
                 }


             }
         } catch (Exception e) {
             res.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                     "An error occurred while creating the file : " + e.getMessage());
         }

     } else {
         res.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE,
                         "Request contents type is not supported by the servlet.");
     }
if(ServletFileUpload.isMultipartContent(req)){
//为基于磁盘的文件项创建工厂
FileItemFactory=new DiskFileItemFactory();
//创建新的文件上载处理程序
ServletFileUpload upload=新的ServletFileUpload(工厂);
//解析请求
试一试{
列表项=upload.parseRequest(req);
用于(文件项:项){
//仅处理文件上载-放弃其他表单项类型
如果(item.isFormField())继续;
字符串文件名=item.getName();
//只获取文件名,不获取整个路径
如果(文件名!=null){
//fileName=FilenameUtils.getName(fileName);
}
}
}捕获(例外e){
res.sendError(HttpServletResponse.SC_内部_服务器_错误,
创建文件时出错:“+e.getMessage()”;
}
}否则{
res.sendError(HttpServletResponse.SC\u不支持\u媒体\u类型,
“servlet不支持请求内容类型。”);
}
和形式

          <form method="POST" action="upload1" enctype="multipart/form-data" >

谢谢你

java.lang.NoClassDefFoundError:org/apache/commons/io/output/DeferredFileOutputStream


它只是告诉您所提到的类在运行时类路径中丢失。正如包名所示,它是ApacheCommonsIO的一部分。你可以从你的电脑上下载。解压缩下载的zip文件,将JAR文件放入
/WEB-INF/lib
,重建/重新部署/重新启动webapp/服务器,此错误应该会消失。

您好,非常感谢BalusC。。很抱歉问了这么愚蠢的问题。我忘了在我的类路径上添加commons IO jar…但另一个问题是我打印了文件名,但没有显示完整的路径名。没问题。希望您至少学会了如何解释异常。至于文件名,完整路径不应该引起您的兴趣。更重要的是,您需要使用
FilenameUtils.getName(item.getName())
将其删除,因为有缺陷的MSIE浏览器会发送完整路径!这条路没用。只需通过
item.getInputStream()
获取文件内容,即
InputStream
。另见。