读书人

List items = upload.parseRequest(re

发布时间: 2013-08-09 15:16:24 作者: rapoo

List items = upload.parseRequest(request),items为空
jsp的form里面这样写的:
<html:form method="post" action="/t04_report/t04_report_list.do" enctype="multipart/form-data">
Action里面这样写的:
private ActionForward performImportReports(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) {
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存缓冲区,超过后写入临时文件
factory.setSizeThreshold(10240000);
// 设置临时文件存储位置
String base = this.getServletContext().getRealPath("/")+"files";
System.out.println("--------base----------------->"+base);
File file = new File(base);
System.out.println("------------>"+file.exists());
if(!file.exists()){
file.mkdirs();
}
factory.setRepository(file);
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置单个文件的最大上传值
upload.setFileSizeMax(10002400000l);
// 设置整个request的最大值
upload.setSizeMax(10002400000l);
upload.setHeaderEncoding("gb2312");
try {
List<?> items = upload.parseRequest(request);
System.out.println("itemsSize--------------->"+items.size());//值为0,纠结啊。。。
FileItem item = null;
String fileName = null;
for (int i = 0 ;i < items.size(); i++){
item = (FileItem) items.get(i);
fileName = base + File.separator + item.getName();
System.out.println("------------------>"+item.getFieldName());
// 保存文件
System.out.println("--------fileName-------->"+fileName);

if (!item.isFormField() && item.getName().length() > 0) {
item.write(new File(fileName));
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

List items = upload.parseRequest(request),items为空,不知道怎么办了,求大哥们帮忙解决啊!
------解决方案--------------------


在status2 的配置文件里加上
<bean type= "org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name= "myRequestParser" class= "com.icf.common.base.actions.RequestParseWrapper"
scope= "default" optional= "true " />
<constant name= "struts.multipart.handler" value= "myRequestParser" />
class
public class RequestParseWrapper extends JakartaMultiPartRequest {

publicvoid parse(HttpServletRequest servletRequest, String saveDir)throws IOException{
}
}
这样就可以得到request里的item
[解决办法]
同样错误,纠结中~
[解决办法]
enctype="multipart/form-data"去掉就可以了
[解决办法]

public void uploadFile(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
request.setCharacterEncoding("GBK");
HttpSession session=request.getSession();
session.setAttribute("progressBar",0); //定义指定上传进度的Session变量
String error = "";
int maxSize=50*1024*1024; //单个上传文件大小的上限
DiskFileItemFactory factory = new DiskFileItemFactory(); //基于磁盘文件项目创建一个工厂对象
ServletFileUpload upload = new ServletFileUpload(factory); //创建一个新的文件上传对象
try {
List items = upload.parseRequest(request);// 解析上传请求
Iterator itr = items.iterator();// 枚举方法
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next(); //获取FileItem对象
if (!item.isFormField()) {// 判断是否为文件域
if (item.getName() != null && !item.getName().equals("")) {// 判断是否选择了文件


long upFileSize=item.getSize(); //上传文件的大小
String fileName=item.getName(); //获取文件名
//System.out.println("上传文件的大小:" + item.getSize());
if(upFileSize>maxSize){
error="您上传的文件太大,请选择不超过50M的文件";
break;
}
// 此时文件暂存在服务器的内存中
File tempFile = new File(fileName);// 构造临时对象
String uploadPath = this.getServletContext().getRealPath("/upload");
File file = new File(uploadPath,tempFile.getName()); // 获取根目录对应的真实物理路径
InputStream is=item.getInputStream();
int buffer=1024; //定义缓冲区的大小
int length=0;
byte[] b=new byte[buffer];
double percent=0;
FileOutputStream fos=new FileOutputStream(file);
while((length=is.read(b))!=-1){


percent+=length/(double)upFileSize*100D; //计算上传文件的百分比
fos.write(b,0,length); //向文件输出流写读取的数据
session.setAttribute("progressBar",Math.round(percent)); //将上传百分比保存到Session中
}
fos.close();
Thread.sleep(1000); //线程休眠1秒
} else {
error="没有选择上传文件!";
}
}
}
} catch (Exception e) {
e.printStackTrace();
error = "上传文件出现错误:" + e.getMessage();
}
if (!"".equals(error)) {
request.setAttribute("error", error);
request.getRequestDispatcher("error.jsp").forward(request, response);
}else {
request.setAttribute("result", "文件上传成功!");
request.getRequestDispatcher("upFile_deal.jsp").forward(request, response);
}

看看这个例子吧
[解决办法]
一楼大侠的办法很好,解决了我纠结以旧的问题,在这里谢了

读书人网 >J2EE开发

热点推荐