转载自:
https://blog.csdn.net/hsj1213522415/article/details/65448717?utm_source=blogxgwz7
最近在做一个项目时,使用bootstrap-fileinput上传文件时遇到一个问题:
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
String uploadPath = basePath + "/upload";//设置下载目录
String tempPath = uploadPath +"/temp";//设置临时目录
File temp = new File(tempPath);
if(!temp.exists()){
temp.mkdirs();
}
factory.setRepository(temp);//设置临时缓冲目录
List<FileItem> list = upload.parseRequest(ServletActionContext.getRequest()); //解析request请求
for (FileItem fileItem : list) {
if (fileItem.isFormField()) {
if (fileItem.getFieldName().equals("resourceCategory")){
resourceCategory = fileItem.getString();
}
}else{
if(fileItem.getName()!=null && !"".equals(fileItem.getName())){
fileItemName = fileItem.getName();
size = fileItem.getSize();
file= new File(realPath);
if(!file.exists()){
file.mkdirs();
}
File dest = new File(file+"/"+fileItemName);
InputStream ins = fileItem.getInputStream();
OutputStream ous = new FileOutputStream(dest);
try {
byte[] buffer = new byte[1024];
int len = 0;
while ((len = ins.read(buffer)) > -1)
ous.write(buffer, 0, len);
}finally {
ous.close();
ins.close();
}
}
}
}
出现list为空或者[],使用的框架是s2sh,访问形式是.action,在网上找了好长时间,都说解决不了,要换,但是研究了之后,终于解决了,具体解决办法如下:
1.新建MyRequestParser类,重写parse方法,里面内容为空
public class MyMultiPartRequest extends JakartaMultiPartRequest{
@Override
public void parse(HttpServletRequest servletRequest, String arg1) throws IOException {
}
}
2、最后在struts2的配置文件下增加下面内容
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name="myMultiPartRequest" class="com.MyMultiPartRequest"
scope="default" optional="true"/>
<constant name="struts.multipart.handler" value="myMultiPartRequest" />
配置完成后list就不为空了