Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 Struts2 excel文件上传使用org.apache.commons.fileupload_Jsp_File Upload_Struts2 - Fatal编程技术网

Jsp Struts2 excel文件上传使用org.apache.commons.fileupload

Jsp Struts2 excel文件上传使用org.apache.commons.fileupload,jsp,file-upload,struts2,Jsp,File Upload,Struts2,我正在为excel实现文件上载,即xls类型的文档,在提交上载时选择文件。parseRequest返回空列表 List<FileItem> items = (List<FileItem>)upload.parseRequest(request) List items=(List)upload.parseRequest(request) 下面是CommonFileUploadServlet.java供查看- import java.io.File; import jav

我正在为excel实现文件上载,即xls类型的文档,在提交上载时选择文件。parseRequest返回空列表

List<FileItem> items = (List<FileItem>)upload.parseRequest(request)
List items=(List)upload.parseRequest(request)
下面是CommonFileUploadServlet.java供查看-

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
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.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class CommonsFileUploadServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        File fullFile = null;
        FileItem item = null;
        int FILE_SIZE = 2097152;
        try {
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);

            if (isMultipart) {
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                List<FileItem> items = (List<FileItem>) upload.parseRequest(request);
                System.out.println("Number of fields: " + items.size());
                Iterator<FileItem> itr = items.iterator();
                String msg = "";

                while (itr.hasNext()) {
                    try {
                        item = (FileItem) itr.next();

                        if (item.isFormField()) {
                            String fieldName = item.getFieldName();
                            if (fieldName.equals("name")) {
                                request.setAttribute("msg", "Thank You: " + item.getString());
                            }
                        } else {
                            String path = request.getParameter("path");
                            String field = request.getParameter("field");
                            System.out.println("path >>" + path + "<br/><br/>");
                            fullFile = new File(item.getName());
                            String imageName = fullFile.getName();
                            File f = new File(path);
                            f.mkdirs();
                            File savedFile = new File(path + "/", imageName);
                            fullFile = uniqueFile(savedFile, path);
                            item.write(fullFile);
                            msg = "file uploaded successfully";
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        msg = "Problem occured while uploading file.<br>Please try again";
                    }
                }
            } else {
                System.out.println("not a multipart request");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public File uniqueFile(File f,String pa) {

        return f;       
    }

}
<body>
        <center>
            <form action="upload.jsp?path=<%=path%>&field=<%=field%>" name="form" method="POST" enctype="multipart/form-data">
                <b><font face=verdana size=2>Upload File:<br><br></font></b>
                <input type="file" name="uploadFile" id="uploadFile"/><br><br>
                <input type="submit" name="Submit" value="Submit" onclick="return callCheck();"/>
            </form>
        </center>
    </body>
导入java.io.File;
导入java.io.IOException;
导入java.util.Iterator;
导入java.util.List;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.commons.fileupload.FileItem;
导入org.apache.commons.fileupload.FileItemFactory;
导入org.apache.commons.fileupload.disk.DiskFileItemFactory;
导入org.apache.commons.fileupload.servlet.ServletFileUpload;
公共类CommonFileUploadServlet扩展了HttpServlet{
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
File fullFile=null;
FileItem=null;
int FILE_SIZE=2097152;
试一试{
布尔值isMultipart=ServletFileUpload.isMultipartContent(请求);
if(isMultipart){
FileItemFactory=new DiskFileItemFactory();
ServletFileUpload upload=新的ServletFileUpload(工厂);
List items=(List)upload.parseRequest(request);
System.out.println(“字段数:+items.size());
迭代器itr=items.Iterator();
字符串msg=“”;
while(itr.hasNext()){
试一试{
item=(FileItem)itr.next();
if(item.isFormField()){
字符串fieldName=item.getFieldName();
if(fieldName.equals(“name”)){
setAttribute(“msg”,“谢谢:”+item.getString());
}
}否则{
字符串路径=request.getParameter(“路径”);
字符串字段=request.getParameter(“字段”);
System.out.println(“路径>>”+path+“

”); fullFile=新文件(item.getName()); 字符串imageName=fullFile.getName(); 文件f=新文件(路径); f、 mkdirs(); File savedFile=新文件(路径+“/”,图像名称); fullFile=uniqueFile(保存文件,路径); 写入(完整文件); msg=“文件上传成功”; } }捕获(例外e){ e、 printStackTrace(); msg=“上传文件时出现问题。
请重试”; } } }否则{ System.out.println(“不是多部分请求”); } }捕获(例外e){ e、 printStackTrace(); } } 公共文件uniqueFile(文件f,字符串pa){ 返回f; } }
dataMigration.jsp如下-

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
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.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class CommonsFileUploadServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        File fullFile = null;
        FileItem item = null;
        int FILE_SIZE = 2097152;
        try {
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);

            if (isMultipart) {
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                List<FileItem> items = (List<FileItem>) upload.parseRequest(request);
                System.out.println("Number of fields: " + items.size());
                Iterator<FileItem> itr = items.iterator();
                String msg = "";

                while (itr.hasNext()) {
                    try {
                        item = (FileItem) itr.next();

                        if (item.isFormField()) {
                            String fieldName = item.getFieldName();
                            if (fieldName.equals("name")) {
                                request.setAttribute("msg", "Thank You: " + item.getString());
                            }
                        } else {
                            String path = request.getParameter("path");
                            String field = request.getParameter("field");
                            System.out.println("path >>" + path + "<br/><br/>");
                            fullFile = new File(item.getName());
                            String imageName = fullFile.getName();
                            File f = new File(path);
                            f.mkdirs();
                            File savedFile = new File(path + "/", imageName);
                            fullFile = uniqueFile(savedFile, path);
                            item.write(fullFile);
                            msg = "file uploaded successfully";
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        msg = "Problem occured while uploading file.<br>Please try again";
                    }
                }
            } else {
                System.out.println("not a multipart request");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public File uniqueFile(File f,String pa) {

        return f;       
    }

}
<body>
        <center>
            <form action="upload.jsp?path=<%=path%>&field=<%=field%>" name="form" method="POST" enctype="multipart/form-data">
                <b><font face=verdana size=2>Upload File:<br><br></font></b>
                <input type="file" name="uploadFile" id="uploadFile"/><br><br>
                <input type="submit" name="Submit" value="Submit" onclick="return callCheck();"/>
            </form>
        </center>
    </body>

上传文件:



请查找以下调试分析-

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
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.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class CommonsFileUploadServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        File fullFile = null;
        FileItem item = null;
        int FILE_SIZE = 2097152;
        try {
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);

            if (isMultipart) {
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                List<FileItem> items = (List<FileItem>) upload.parseRequest(request);
                System.out.println("Number of fields: " + items.size());
                Iterator<FileItem> itr = items.iterator();
                String msg = "";

                while (itr.hasNext()) {
                    try {
                        item = (FileItem) itr.next();

                        if (item.isFormField()) {
                            String fieldName = item.getFieldName();
                            if (fieldName.equals("name")) {
                                request.setAttribute("msg", "Thank You: " + item.getString());
                            }
                        } else {
                            String path = request.getParameter("path");
                            String field = request.getParameter("field");
                            System.out.println("path >>" + path + "<br/><br/>");
                            fullFile = new File(item.getName());
                            String imageName = fullFile.getName();
                            File f = new File(path);
                            f.mkdirs();
                            File savedFile = new File(path + "/", imageName);
                            fullFile = uniqueFile(savedFile, path);
                            item.write(fullFile);
                            msg = "file uploaded successfully";
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        msg = "Problem occured while uploading file.<br>Please try again";
                    }
                }
            } else {
                System.out.println("not a multipart request");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public File uniqueFile(File f,String pa) {

        return f;       
    }

}
<body>
        <center>
            <form action="upload.jsp?path=<%=path%>&field=<%=field%>" name="form" method="POST" enctype="multipart/form-data">
                <b><font face=verdana size=2>Upload File:<br><br></font></b>
                <input type="file" name="uploadFile" id="uploadFile"/><br><br>
                <input type="submit" name="Submit" value="Submit" onclick="return callCheck();"/>
            </form>
        </center>
    </body>
  • 在调试模式下的变量下,我可以看到请求变量在多文件表中有文件
  • 但是items变量为空,i/e modcount=0&size=0
  • web.xml文件-

    <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <display-name>MySystem</display-name>
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
            <init-param>
                <param-name>actionPackages</param-name>
                <param-value>com.emsproject</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <listener>
            <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
        </listener>
        <listener>
            <description>sessionListener</description>
            <listener-class>com.emsproject.action.common.SessionListener</listener-class>
        </listener>
        <context-param>
            <param-name>tilesDefinitions</param-name>
            <param-value>/WEB-INF/tiles.xml</param-value>
        </context-param>
        <welcome-file-list>
            <welcome-file>/jsp/common/index.html</welcome-file>
        </welcome-file-list>
        <servlet>
            <servlet-name>SysInfo</servlet-name>
            <servlet-class>com.emsproject.action.common.SysInfoServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>SysInfo</servlet-name>
            <url-pattern>/eapp/*</url-pattern>
        </servlet-mapping>
    </web-app>
    
    
    我的系统
    支柱2
    org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter
    行动包
    com.ems项目
    支柱2
    /*
    org.apache.struts2.tiles.StrutsTilesListener
    会话侦听器
    com.emsproject.action.common.SessionListener
    瓷砖定义
    /WEB-INF/tiles.xml
    /jsp/common/index.html
    系统信息
    com.emsproject.action.common.SysInfoServlet
    系统信息
    /eapp/*
    
    我尝试了许多可能的替代方法,但是parseRequest方法返回空列表

    请在这方面帮助我,因为我整天都在为这个问题挣扎:( 我不想使用s:file,即struts文件上传功能

    谢谢
    pshinde31

    我找到了解决我所面临问题的方法@

    从上面的帖子中看到的东西:)-

    我终于安全地将struts2过滤器映射从“/”更改为“.action” 今天,我成功地将redback struts2与我现有的 网络应用。

    我尝试了一下&S2 fileupload拦截器没有干扰&我所有使用S2的操作都有*.action扩展名

    感谢Roman C&Dave的时间和努力,我很感激


    pshinde31

    看,我之前确实检查过上面的帖子,但不确定如何实现相同的功能,也不确定我需要在struts操作中进行哪些明确的修改,以便从请求中接收文件列表,该列表中存在。我已经将上传代码从jsp转移到servlet类并编辑了原始帖子。我验证了所有上述引用,但仍然无法上传文件。此外,由于没有记录错误,因此我很难进行必要的更改。从上面的代码片段中,我可以知道需要进行哪些更改/修改。我的Struts操作被添加到原来的帖子中。我也不能简单地绕过/忽略/避免Struts 2 fileUpload拦截器干扰这个实现