Jsp Struts2 excel文件上传使用org.apache.commons.fileupload
我正在为excel实现文件上载,即xls类型的文档,在提交上载时选择文件。parseRequest返回空列表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
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>
<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拦截器干扰这个实现