List items = upload.parseRequest(request); items为空问题

lkt19911025 2015-05-25 02:50:13
我用struts2
上传文件 用的 ajaxfileupload.js
处理上传 用的 servlet文件
我有两个项目 在A项目里 没有问题 上传正常
在第二个项目里 配置完全一样
struts过滤器 我设置了
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.zm</url-pattern>
</filter-mapping>
网上说的
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name="myRequestParser" class="zm.web.myRequestParser.MyRequestParser"
scope="default" optional="true" />
<constant name="struts.multipart.handler" value="myRequestParser" />
这个方式 我也试过了
我的B项目中的List<FileItem> items = upload.parseRequest(request); 就是空的

各位大神 有什么好的思路给一个
同样的东西 在不同的项目里 有不同的效果
...全文
1340 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
白猫出更 2017-08-07
  • 打赏
  • 举报
回复 1
要确保Form中的<input>元素有name这个属性有值 不然运行结果就是空的 亲测有效
qq_32313009 2016-09-14
  • 打赏
  • 举报
回复
就没人会吗????
baidu_35767953 2016-08-02
  • 打赏
  • 举报
回复
楼主我遇到了和你一样的问题,name? 怎么解决的啊
  • 打赏
  • 举报
回复
怎么解决的?什么name?
燚风焱火 2015-12-08
  • 打赏
  • 举报
回复
什么name问题,怎么就断了呢
Java码农老王 2015-11-05
  • 打赏
  • 举报
回复
楼主怎么解决的啊?
lkt19911025 2015-05-27
  • 打赏
  • 举报
回复
解决了 好弱智啊 问题考虑的不周全啊 name 就因为name
lkt19911025 2015-05-26
  • 打赏
  • 举报
回复
引用 6 楼 hzy38324 的回复:
既然楼主使用的是strut,那么就用strut提供的文件上传方法啦。 使用Action,而不是JavaWeb的Servlet 在Action中配置三个属性 private File image; //上传的文件 private String imageFileName; //文件名称 private String imageContentType; //文件类型 其他细节参考http://www.cnblogs.com/linjiqin/archive/2011/03/21/1990674.html
这个我会 我需要页面无刷新 所以用的 ajaxfileupload插件 也可以使用action文件上传 还得配置台麻烦 我就用servlet了 我奇怪的是 两个功能完全一样的 项目 一个好使 另一个就不行
lkt19911025 2015-05-26
  • 打赏
  • 举报
回复
问题依然没有解决 来人帮帮忙啊吧
SexyCode 2015-05-25
  • 打赏
  • 举报
回复
既然楼主使用的是strut,那么就用strut提供的文件上传方法啦。 使用Action,而不是JavaWeb的Servlet 在Action中配置三个属性 private File image; //上传的文件 private String imageFileName; //文件名称 private String imageContentType; //文件类型 其他细节参考http://www.cnblogs.com/linjiqin/archive/2011/03/21/1990674.html
lkt19911025 2015-05-25
  • 打赏
  • 举报
回复
引用 4 楼 rui888 的回复:
reuest 中为空,排除上面的原因的话,调试源码看看。
找不到原因呀
tony4geek 2015-05-25
  • 打赏
  • 举报
回复
reuest 中为空,排除上面的原因的话,调试源码看看。
lkt19911025 2015-05-25
  • 打赏
  • 举报
回复
引用 1 楼 rui888 的回复:
你是看的这个?
恩 是的 按照这个方法 依然 为空 我之前的那个项目 我没有按这个写 但是 可以上传充公
lkt19911025 2015-05-25
  • 打赏
  • 举报
回复
引用 1 楼 rui888 的回复:
你是看的这个?
看什么??
tony4geek 2015-05-25
  • 打赏
  • 举报
回复
将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用。下面举例介绍如何使用它的文件上传功能。 所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0。FileUpload 是基于 Commons IO的,所以在进入项目前先确定Commons IO的jar包(本文使用commons-io-1.3.2.jar)在WEB-INF\lib下。 此文作示例工程可在文章最后的附件中下载。 示例1 最简单的例子,通过ServletFileUpload静态类来解析Request,工厂类FileItemFactory会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString()得到表单数据内容,isFormField()可判断是否为普通的表单项。 demo1.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> //必须是multipart的表单数据。 <form name="myform" action="demo1.jsp" method="post" enctype="multipart/form-data"> Your name: <input type="text" name="name" size="15"><br> File: <input type="file" name="myfile"><br> <input type="submit" name="submit" value="Commit"> </form> </body> </html> demo1.jsp <% boolean isMultipart = ServletFileUpload.isMultipartContent(request);//检查输入请求是否为multipart表单数据。 if (isMultipart == true) { FileItemFactory factory = new DiskFileItemFactory();//为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中。 ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request); Iterator itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); //检查当前项目是普通表单项目还是上传文件。 if (item.isFormField()) {//如果是普通表单项目,显示表单内容。 String fieldName = item.getFieldName(); if (fieldName.equals("name")) //对应demo1.html中type="text" name="name" out.print("the field name is" + item.getString());//显示表单内容。 out.print(""); } else {//如果是上传文件,显示文件名。 out.print("the upload file name is" + item.getName()); out.print(""); } } } else { out.print("the enctype must be multipart/form-data"); } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 结果: the field name isjeff the upload file name isD:\C语言考试样题\作业题.rar 示例2 上传两个文件到指定的目录。 demo2.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> <form name="myform" action="demo2.jsp" method="post" enctype="multipart/form-data"> File1: <input type="file" name="myfile"><br> File2: <input type="file" name="myfile"><br> <input type="submit" name="submit" value="Commit"> </form> </body> </html> demo2.jsp <%String uploadPath="D:\\\\temp"; boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(isMultipart==true){ try{ FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request);//得到所有的文件 Iterator itr = items.iterator(); while(itr.hasNext()){//依次处理每个文件 FileItem item=(FileItem)itr.next(); String fileName=item.getName();//获得文件名,包括路径 if(fileName!=null){ File fullFile=new File(item.getName()); File savedFile=new File(uploadPath,fullFile.getName()); item.write(savedFile); } } out.print("upload succeed"); } catch(Exception e){ e.printStackTrace(); } } else{ out.println("the enctype must be multipart/form-data"); } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 结果: upload succeed 此时,在"D:\temp"下可以看到你上传的两个文件。 示例3 上传一个文件到指定的目录,并限定文件大小。 demo3.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> <form name="myform" action="demo3.jsp" method="post" enctype="multipart/form-data"> File: <input type="file" name="myfile"><br> <input type="submit" name="submit" value="Commit"> </form> </body> </html> demo3.jsp <% File uploadPath = new File("D:\\temp");//上传文件目录 if (!uploadPath.exists()) { uploadPath.mkdirs(); } // 临时文件目录 File tempPathFile = new File("d:\\temp\\buffer\\"); if (!tempPathFile.exists()) { tempPathFile.mkdirs(); } try { // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);//设置缓冲区目录 // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB List items = upload.parseRequest(request);//得到所有的文件 Iterator i = items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if (fileName != null) { File fullFile = new File(fi.getName()); File savedFile = new File(uploadPath, fullFile .getName()); fi.write(savedFile); } } out.print("upload succeed"); } catch (Exception e) { e.printStackTrace(); } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 示例4 利用Servlet来实现文件上传。 Upload.java package com.zj.sample; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @SuppressWarnings("serial") public class Upload extends HttpServlet { private String uploadPath = "D:\\temp"; // 上传文件的目录 private String tempPath = "d:\\temp\\buffer\\"; // 临时文件目录 File tempPathFile; @SuppressWarnings("unchecked") public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);// 设置缓冲区目录 // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB List items = upload.parseRequest(request);// 得到所有的文件 Iterator i = items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if (fileName != null) { File fullFile = new File(fi.getName()); File savedFile = new File(uploadPath, fullFile.getName()); fi.write(savedFile); } } System.out.print("upload succeed"); } catch (Exception e) { // 可以跳转出错页面 e.printStackTrace(); } } public void init() throws ServletException { File uploadFile = new File(uploadPath); if (!uploadFile.exists()) { uploadFile.mkdirs(); } File tempPathFile = new File(tempPath); if (!tempPathFile.exists()) { tempPathFile.mkdirs(); } } } demo4.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> // action="fileupload"对应web.xml中中的设置. <form name="myform" action="fileupload" method="post" enctype="multipart/form-data"> File: <input type="file" name="myfile"><br> <input type="submit" name="submit" value="Commit"> </form> </body> </html> web.xml Upload com.zj.sample.Upload Upload /fileupload

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧