Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 jspservlet文件上传doGet_Java_Jsp_Servlets_File Upload_Apache Commons - Fatal编程技术网

Java jspservlet文件上传doGet

Java jspservlet文件上传doGet,java,jsp,servlets,file-upload,apache-commons,Java,Jsp,Servlets,File Upload,Apache Commons,我可以使用ApacheCommonsFileUpload在servlet中上传文件。下面的代码在servlet的processRequest方法中工作,但我将代码复制粘贴到doPost方法中,现在它不再工作了。线路 List fileItems = upload.parseRequest(request); 生成文件项的空数组。 这怎么可能 下面是完整的doPost方法 @Override protected void doPost(HttpServletRequest request, H

我可以使用ApacheCommonsFileUpload在servlet中上传文件。下面的代码在servlet的processRequest方法中工作,但我将代码复制粘贴到doPost方法中,现在它不再工作了。线路

 List fileItems = upload.parseRequest(request);
生成文件项的空数组。 这怎么可能

下面是完整的doPost方法

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    int fileId = 0;

    String LogicalName = "";
    String PartNr = "";
    String Cost = "";
    String Assembly = "";
    String Comment = "";
    try {
        Connection conn = MysqlConnect.conn();
        List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
        for (FileItem item : items) {
            if (item.isFormField()) {  //als het een veld is dan dit, anders File uploaden
                String fieldname = item.getFieldName();
                String fieldvalue = item.getString();
                switch (fieldname) {
                    case "logicalName":
                        LogicalName = fieldvalue;
                        break;
                    case "partNr":
                        PartNr = fieldvalue;
                        break;
                    case "cost":
                        Cost = fieldvalue;
                        break;
                    case "assembly":
                        Assembly = fieldvalue;
                        break;
                    case "comments":
                        Comment = fieldvalue;
                        break;

                }

            } else {
                PrintWriter out = response.getWriter();
                File file;
                int maxFileSize = 500000 * 1024;//max 500 mb groot
                int maxMemSize = 5000 * 1024;//max 5mb gecached in het ram,indien file groter is eerst wegschrijven in een temp dir

                String filePath = "C:\\uploads\\";
                String fileName = "";
                String contentType = request.getContentType();
                if ((contentType.indexOf("multipart/form-data") >= 0)) {

                    DiskFileItemFactory factory = new DiskFileItemFactory();
                    factory.setSizeThreshold(maxMemSize);
                    factory.setRepository(new File("c:\\temp"));
                    ServletFileUpload upload = new ServletFileUpload(factory);
                    upload.setSizeMax(maxFileSize);

                    try {
                        List fileItems = upload.parseRequest(request);
                        Iterator i = fileItems.iterator();

                        while (i.hasNext()) {
                            FileItem fi = (FileItem) i.next();
                            if (!fi.isFormField()) {
                                String fieldName = fi.getFieldName();
                                fileName = fi.getName();
                                boolean isInMemory = fi.isInMemory();
                                long sizeInBytes = fi.getSize();
                                if (fileName.lastIndexOf("\\") >= 0) {
                                    file = new File(filePath
                                            + fileName.substring(fileName.lastIndexOf("\\")));
                                } else {
                                    file = new File(filePath
                                            + fileName.substring(fileName.lastIndexOf("\\") + 1));
                                }
                                fi.write(file);
                            }
                        }





                        HttpSession session = request.getSession();


                        int uploader = (Integer) session.getAttribute("UserId");
                        String Query = "Insert into tbl_file (fileLocation,Uploader)values(\"" + fileName + "\"," + uploader + ");";
                        PreparedStatement st = conn.prepareStatement(Query, Statement.RETURN_GENERATED_KEYS);
                        st.executeUpdate();


                        ResultSet rs = st.getGeneratedKeys();
                        if (rs.next()) {
                            fileId = rs.getInt(1);
                        }


                    } catch (Exception ex) {
                        System.out.println(ex);
                    }
                }
            }
        }
        if (fileId == 0) {
            //ERROR
        } else {
            Statement stmt = conn.createStatement();
            String Query1 = "Insert into tbl_part (partCad,partCost,partAssembly,partMotivation,partOf) VALUES(" + fileId + "," + Cost + "," + Assembly + ",\"" + Comment + "\"," + "1" + ");";
            stmt.executeUpdate(Query1);
        }
        MysqlConnect.close(conn);
    } catch (SQLException ex) {
        Logger.getLogger(UploadServlet.class.getName()).log(Level.SEVERE, null, ex);
    } catch (FileUploadException e) {
        throw new ServletException("Cannot parse multipart request.", e);
    }
    String URL = "/home.jsp";
    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(URL);
    dispatcher.forward(request, response);

}
@覆盖
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
int fileId=0;
字符串LogicalName=“”;
字符串PartNr=“”;
字符串成本=”;
字符串组合=”;
字符串注释=”;
试一试{
Connection conn=MysqlConnect.conn();
列表项=新建ServletFileUpload(新建DiskFileItemFactory()).parseRequest(请求);
用于(文件项:项){
如果(item.isFormField()){//als het een veld是dan dit,则anders文件上载
字符串fieldname=item.getFieldName();
String fieldvalue=item.getString();
交换机(字段名){
案例“logicalName”:
LogicalName=字段值;
打破
案例“partNr”:
PartNr=字段值;
打破
案例“成本”:
成本=现场价值;
打破
案例“组装”:
汇编=字段值;
打破
案例“评论”:
注释=字段值;
打破
}
}否则{
PrintWriter out=response.getWriter();
文件;
int maxFileSize=500000*1024;//最大值为500 mb groot
int maxmesize=5000*1024;//在het ram中最大缓存5mb,在een temp dir中,indien文件groter是eerst wegschrijven
String filePath=“C:\\uploads\\”;
字符串fileName=“”;
String contentType=request.getContentType();
if((contentType.indexOf(“多部分/表单数据”)>=0)){
DiskFileItemFactory=新的DiskFileItemFactory();
factory.setSizeThreshold(maxMemSize);
setRepository(新文件(“c:\\temp”);
ServletFileUpload upload=新的ServletFileUpload(工厂);
upload.setSizeMax(maxFileSize);
试一试{
List fileItems=upload.parseRequest(请求);
迭代器i=fileItems.Iterator();
while(i.hasNext()){
FileItem fi=(FileItem)i.next();
如果(!fi.isFormField()){
字符串fieldName=fi.getFieldName();
fileName=fi.getName();
布尔值isInMemory=fi.isInMemory();
long-sizeInBytes=fi.getSize();
如果(fileName.lastIndexOf(“\\”>)=0){
文件=新文件(文件路径
+fileName.substring(fileName.lastIndexOf(“\\”);
}否则{
文件=新文件(文件路径
+fileName.substring(fileName.lastIndexOf(“\\”+1));
}
fi.写入(文件);
}
}
HttpSession session=request.getSession();
int uploader=(整数)session.getAttribute(“UserId”);
String Query=“插入tbl_文件(文件位置,上传程序)值(\”“+fileName+”\“,“+Uploader+”)”;
PreparedStatement st=conn.prepareStatement(查询、语句、返回\u生成的\u键);
st.executeUpdate();
ResultSet rs=st.getGeneratedKeys();
如果(rs.next()){
fileId=rs.getInt(1);
}
}捕获(例外情况除外){
系统输出打印项次(ex);
}
}
}
}
if(fileId==0){
//错误
}否则{
语句stmt=conn.createStatement();
String Query1=“插入tbl\U零件(零件CAD、零件成本、零件装配、零件动机、零件OF)值(“+fileId+”、“+Cost+”、“+Assembly+”、\”“+Comment+”、“+1+”);”;
stmt.executeUpdate(查询1);
}
MysqlConnect.close(连接);
}catch(SQLException-ex){
Logger.getLogger(UploadServlet.class.getName()).log(Level.SEVERE,null,ex);
}捕获(文件上载异常){
抛出新的ServletException(“无法解析多部分请求。”,e);
}
字符串URL=“/home.jsp”;
RequestDispatcher=getServletContext().getRequestDispatcher(URL);
转发(请求、响应);
}
这是JSP

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
  <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     
 "http://www.w3.org/TR/html4/loose.dtd">

 <html>
 <head>
 <title>File Uploading Form</title>
 </head>
 <body>
 <h3>File Upload:</h3>
 Select a file to upload: <br />
 <form action="/Racing/UploadServlet" method="post"
                    enctype="multipart/form-data">
 <input type="file" name="file"  />
 <br />
 Logische Naam: <input type="text" name="logicalName"><br>
 Stuknr(automatisch,nog niet geimplementeerd): <input type="text" name="partNr"><br>
 Kost: <input type="text" name="cost"><br>


 Assembly:
<select name = "assembly">
 <c:forEach var ="assembly" items="${Assemblys}">
  <option value="${assembly.id}">${assembly.name}</option>
 </c:forEach>
</select>
<br>
<textarea name="comments" cols="25" rows="5">
Verdediging Design
</textarea><br>

<input type="submit" value="Upload File" />

</form>
</body>
</html>

文件上载表格
文件上载:
选择要上载的文件:

罗吉斯纳姆:
Stuknr(自动,无需执行):
科斯特:
大会: ${assembly.name}
绿色设计

非常感谢

您的代码行
List fileItems=upload.parseRequest(请求)
甚至
else
部分中的所有行都没有任何意义,因为:

  • 您已经在此行中处理过请求

    List<FileItem> items = new ServletFileUpload(
        new DiskFileItemFactory()).parseRequest(request);
    

    附加:检查构造器。

    检查您使用的表格,必须有“方法”不同!!!!!!是的,但现在他编辑了这篇文章,但他仍然没有告诉我们表单方法。@sunleo,如果它以前有效的话(作为O
    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    List<FileItem> items = upload.parseRequest(request);
    for (FileItem item : items) {
        if (item.isFormField()) {  //als het een veld is dan dit, anders File uploaden
            String fieldname = item.getFieldName();
            String fieldvalue = item.getString();
            switch (fieldname) {
                case "logicalName":
                    LogicalName = fieldvalue;
                    break;
                //other case statements...
            }
        } else {
            //here you only have to process the file
            File file;
            int maxFileSize = 500000 * 1024;//your comments...
            int maxMemSize = 5000 * 1024;//your comments...
            //this must be a constant or a servlet init param, do not hard code it
            String filePath = "C:\\uploads\\";
            String fileName = FilenameUtils.getName(item.getName());
            factory.setSizeThreshold(maxMemSize);
            //didn't you have a filePath variable?
            factory.setRepository(new File("c:\\temp"));
            upload.setSizeMax(maxFileSize);
            try {
                String fieldName = fi.getFieldName();
                boolean isInMemory = fi.isInMemory();
                long sizeInBytes = fi.getSize();
                file = new File(filePath, fileName);
                item.write(file);
                //code to save your file location in db...
                //note: this MUST BE in a business logic method, not directly written in your servlet
                HttpSession session = request.getSession();
                int uploader = (Integer) session.getAttribute("UserId");
            } catch (Exception ex) {
                //very BAD idea
                //use a logger instead like log4j or sfl4j
                System.out.println(ex);
            }
        }
    }