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
Java commons文件上传(Apache)_Java_Jsp_Servlets_File Upload_Apache Commons - Fatal编程技术网

Java commons文件上传(Apache)

Java commons文件上传(Apache),java,jsp,servlets,file-upload,apache-commons,Java,Jsp,Servlets,File Upload,Apache Commons,我在这里遇到空指针异常: List fileItems = upload.parseRequest(req); 如果文件中的行数大于大约2000行,则会发生这种情况,因为我可以上传1000行以上的文件。有人请帮帮我。表格如下 <form name="fos_picks" id="fos_picks" action="<%=path%>/fos_upld" method="post" enctype="multipart/form-data" > <br/>

我在这里遇到空指针异常:

List fileItems = upload.parseRequest(req);
如果文件中的行数大于大约2000行,则会发生这种情况,因为我可以上传1000行以上的文件。有人请帮帮我。表格如下

<form name="fos_picks" id="fos_picks" action="<%=path%>/fos_upld" method="post" enctype="multipart/form-data" >

<br/><br/><br/><br/>
<p align="center">
    <input type="file" name="file" size="50" /><br/>
    <br/>
    <input type="submit" class="buttons" value="Upload File" />
    </p>
</form>

您的具体问题是由错误的异常处理和视图与控制器的紧密耦合引起的

过滤代码中的噪声后,大致如下所示:

File file = null;

try {
    // ... 
    file = new File(...);
    // ... 
} catch (Exception e) {
    out.println("...");
}

try {
    if (file.isFile())
        // ...
    } else {
        // ...
    }
} catch (Exception e) {
    out.println("...");
}
NullPointerException
被抛出到带有
if(file.isFile())
块的行中。这意味着第一个
try
块抛出了一个异常,从而将
文件
保留为
null

问题的原因有两方面:

  • 第一个
    try
    块不是在异常时从servlet方法返回,而是错误地继续代码流
  • 第二个
    try
    块没有事先检查
    文件是否不是
    null
  • 你的具体问题要大得多。您完全接受异常并打印不相关的HTML代码,而不是将它们抛出和/或记录异常

    按如下方式更换挡块:

    } catch (Exception e) {
        throw new ServletException(e);
    }
    
    默认情况下,这种方式将记录异常,并在HTTP 500错误页面中以完整的方式显示,包括stacktrace。stacktrace为您提供了大量信息,帮助您了解问题并解决问题



    与具体问题无关代码中还有许多其他概念和设计错误,但到目前为止,它们与具体问题没有直接关系。不过,我建议暂停一下,浏览一些理智的Servlet书籍/教程/资源。这段代码似乎只是根据在谷歌找到的片段拼凑而成,而不是经过深思熟虑编写的。第一步是了解servlet的实际工作方式:

    您使用的是Spring框架吗?请分享您的上传控制器代码。不,我没有使用任何框架。我不能在8小时内上传,因为我的声誉不足10:(请分享您上传文件时使用的java代码,我不能在这里评论我能给出的有限文本,我也不能回答我自己的问题。如果我尝试回答我自己的问题,我得到的错误声誉少于10个,直到8小时完成才能回答你自己的问题。非常感谢你们,我会解决我的错误,我也是通过给定的链接:)K.Guyz最后,我深入研究了异常处理并学习了abt。在大家的帮助下以正确的方式实现后(干杯)…我得到了这个异常..apache.commons.fileupload.FileUploadBase$SizeLimitExceedeException:请求被拒绝,因为它的大小(220582)超过了配置的最大值(51200)现在解决了..增加了文件大小。Thanks@user1544102如果你能帮我解决这个问题
     package file_proc;
    import DBConn.DBConn;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.sql.PreparedStatement;
    import java.util.Iterator;
    import java.util.List;
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    
    @WebServlet(name="file_upld", urlPatterns = {"/file_upld"}) 
    
    public class file_upld extends HttpServlet {
    
       private boolean isMultipart;
       private String filePath;
       private int maxFileSize = 50 * 1024;
       private int maxMemSize = 10 * 1024;
       private File file ;
    
    /*   public void init( ){
          // Get the file location where it would be stored.
          filePath = 
                 getServletContext().getInitParameter("file-upload"); 
       }*/
        @Override
       public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, java.io.IOException {
          // Check that we have a file upload request
           java.io.PrintWriter out = res.getWriter( );
        //   out.println("entered");
          isMultipart = ServletFileUpload.isMultipartContent(req);
    
          res.setContentType("text/html");
    
          if( !isMultipart ){
             out.println("!multipart");
             System.out.println("here");
             return;
          }
          DiskFileItemFactory factory = new DiskFileItemFactory();
          // maximum size that will be stored in memory
          factory.setSizeThreshold(maxMemSize);
          // Location to save data that is larger than maxMemSize.
          factory.setRepository(new File("c:/temp"));
          // Create a new file upload handler
          ServletFileUpload upload = new ServletFileUpload(factory);
          // maximum file size to be uploaded.
          upload.setSizeMax( maxFileSize );
     ServletContext servletContext = getServletContext();
        String path = servletContext.getRealPath("/");
         BufferedReader br=null;
         String fileName="";
         DBConn db = new DBConn();
    
          try{ 
          // Parse the request to get file items.
              System.out.println("here1"+req);
          List fileItems = upload.parseRequest(req);
    
          // Process the uploaded file items
          Iterator i = fileItems.iterator();
    
    /*      out.println("<html>");
          out.println("<head>");
          out.println("<title>Upload</title>");  
          out.println("</head>");
          out.println("<body>");*/
          while ( i.hasNext () ) 
          {
             FileItem fi = (FileItem)i.next();
             if ( !fi.isFormField () )  
             {
                // Get the uploaded file parameters
                String fieldName = fi.getFieldName();
                fileName = fi.getName();
                String contentType = fi.getContentType();
                boolean isInMemory = fi.isInMemory();
                long sizeInBytes = fi.getSize();
                // Write the file
                if( fileName.lastIndexOf("\\") >= 0 ){
                   file = new File( "c:/Temp/" + 
                   fileName.substring( fileName.lastIndexOf("\\"))) ;
                }else{
                   file = new File( "c:/Temp/"+ 
                   fileName.substring(fileName.lastIndexOf("\\")+1)) ;
                }
                if(!file.exists())
                {
                    File fold=new File(file.getParent());
                    fold.mkdirs();
                }
                fi.write( file ) ;
                System.out.println("Uploaded Filename: " + fileName + "<br>");
             }
          }
          }catch(Exception ce)
          {
                out.println("<font size='30' color='red'>Error Code 016</font>");
            //out.println("Exception1: "+ce);
          }
     //read uploaded file and insert into table********************************************  
    
        //      String newline = System.getProperty("line.separator");
    //  File file = new File(path+"//"+fileName);
                //  file.createNewFile();
    try{
    
        if(file.isFile())
        {
             br = new BufferedReader(new FileReader(file));
        String str="";
        String temp[]=null;
    
    
            file.canWrite();
            file.canRead();
            file.setWritable(true);
    
            db.conn.setAutoCommit(false);
            while((str=br.readLine())!=null)
                        {
                            temp=str.split("    ");
    
                    //      PreparedStatement ps = db.conn.prepareStatement("INSERT INTO file_proc VALUES(?,?,?,?,?,?,?,?,?,STR_TO_DATE(?,'%m/%d/%Y'))");
                            PreparedStatement ps = db.conn.prepareStatement("INSERT INTO file_proc(run_date,zone,location,bank,file_type,num_rec,ex_sett_date,ex_stat_date) "
                                                            + "VALUES(STR_TO_DATE(?,'%m/%d/%Y'),?,?,?,?,?,STR_TO_DATE(?,'%m/%d/%Y'),STR_TO_DATE(?,'%m/%d/%Y'))");
                            ps.setString(1,temp[0]);
                            ps.setString(2,temp[1]);
                            ps.setString(3,temp[2]);
                            ps.setString(4,temp[3]);
                            ps.setString(5,temp[4]);
                            ps.setInt(6,Integer.parseInt(temp[5]));
                            ps.setString(7,temp[6]);
                            ps.setString(8,temp[7]);
                            ps.executeUpdate();
                            ps.close();     
    
                        }   
                        db.conn.commit();
                        db.conn.setAutoCommit(true);
                        db.conn.close();
                        br.close(); 
            file.delete();  
    
           //  RequestDispatcher rd = req.getRequestDispatcher("./status/status.jsp");
            //  rd.forward(req, res);
              out.print("success");
         //     out.println("</html>");
        }
        else
        {
            out.println(file+" is not a file");
        }           
    
       }catch(Exception ex) {
        out.println("file name= "+fileName);
          // out.println("DBEX= "+ex );
            out.println("<font size='30' color='red'>Error Code 017 - Recommended date format = m/d/yyyy.</font>");
            out.println("<font size='30' color='red'>Check the column order</font>"+ex);    
          //file.delete();  
         //  RequestDispatcher rd = req.getRequestDispatcher("./status/error.jsp");
    //  rd.forward(req, res);
       }finally{
                        try{
                            db.conn.close();
                            br.close();
                        }catch(Exception e){}
                    }
       }
        @Override
       public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, java.io.IOException {
    
           doPost(request, response);  
       } 
    }
    
    <form name="file_proc" id="file_proc" method = "post" action="../file_upld" enctype="multipart/form-data">
        <br/><br/><br/><br/>
        <p align="center">
    <input type="file" id="file" name="file" size="50" /><br/>
    <br/>
    <input type="submit" class="buttons" value="Upload File" />br/><br/><br/>
         </p>
    </form>
    
    import java.io.IOException;
    import javax.servlet.*;
    import javax.servlet.http.HttpServletResponse;
    
    public class filter implements Filter{
    
        private FilterConfig config=null;
        @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException 
    {
        HttpServletResponse hsr = (HttpServletResponse) res;
        hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
        hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
        hsr.setDateHeader("Expires", 0); // Proxies.
        chain.doFilter(req, res);
    }
        @Override
        public void destroy() { }
        @Override
      public void init(FilterConfig config) {
      this.config = config;
      }
    }
    
    File file = null;
    
    try {
        // ... 
        file = new File(...);
        // ... 
    } catch (Exception e) {
        out.println("...");
    }
    
    try {
        if (file.isFile())
            // ...
        } else {
            // ...
        }
    } catch (Exception e) {
        out.println("...");
    }
    
    } catch (Exception e) {
        throw new ServletException(e);
    }