开发日志:struts2使用commons.fileupload上传附件,并解决upload.parseRequest(request)为空的问题
来源:互联网 发布:数据库怎么设置外键 编辑:程序博客网 时间:2024/04/30 01:01
要做一个phongap开发的App上传文件到服务器的Action,打算使用commons.fileupload的方式
接口jsp页面
<form action="uploadAction.action" method="post" enctype="multipart/form-data"><table><tr><td>上传附件:uploadAction.action</td></tr><tr><td><input name="file" type="file" size="20" ></td><td>上传图片</td></tr><tr><td colspan="2" align="center"><input type="submit" value="上传"/></td></tr></table></form>
保存附件的Action方法
/** * 初始化目录(如果目录不存在,新建) * @param uploadPath 保存路径 * @param tempPath 临时文件路径 * @throws ServletException */private void initDir(String uploadPath,String tempPath) throws ServletException{File uploadFile = new File(uploadPath);if (!uploadFile.exists()) {uploadFile.mkdirs();}File tempPathFile = new File(tempPath);if (!tempPathFile.exists()) {tempPathFile.mkdirs();}}public String uploadAction()throws Exception{try {Date date = new Date();//上传文件request.setCharacterEncoding("UTF-8");DiskFileItemFactory factory = new DiskFileItemFactory();factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kbString basePath = ServletActionContext.getRequest().getRealPath("/");//获取根目录//设置下载目录String uploadPath = basePath + "/upload";//设置临时目录String tempPath = uploadPath +"/temp";//uploadPath = uploadPath +"/"+ date.getTime();//添加时间目录防止重复this.initDir(uploadPath, tempPath);File tempPathFile = new File(tempPath); factory.setRepository(tempPathFile);// 设置缓冲区目录ServletFileUpload upload = new ServletFileUpload(factory);//upload.setSizeMax(34194304); 设置最大文件尺寸,4MBList items = upload.parseRequest(request);//得到所有的文件Iterator itr = items.iterator();while(itr.hasNext()){FileItem fileItem = (FileItem) itr.next();if(fileItem.isFormField()){System.out.println("表单参数名:"+fileItem.getFieldName()+",表单参数值:"+fileItem.getString("utf-8"));}else{if(fileItem.getName()!=null && !"".equals(fileItem.getName())){System.out.println("上传文件的大小:"+fileItem.getSize());System.out.println("上传文件的类型:"+fileItem.getContentType());System.out.println("上传文件的名称:"+fileItem.getName());//保存文件File saveFile = new File(uploadPath,fileItem.getName());fileItem.write(saveFile);imgUrl = uploadPath+"/"+fileItem.getName();System.out.println("上传成功");}else{System.out.println("没有上传文件");}}}return "success";} catch (Exception e) {e.printStackTrace();throw new Exception(e);}}
调用Action的时候发现
List items = upload.parseRequest(request);
items的值一直为空,网上找了下原因:参考http://blog.csdn.net/qq964166471/article/details/21385041
原因是struts2把原始的原来S2为简化上传功能,把所有的enctype="multipart/form-data"表单做了wrapper最后把HttpServletResquest封装成 org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
我采用的解决步骤
1、新建MyRequestParser类,重写parse方法,里面内容为空
public class MyMultiPartRequest extends JakartaMultiPartRequest{@Overridepublic void parse(HttpServletRequest servletRequest, String arg1) throws IOException {}}
2、设置完后,使用上面方法的上传成功了,但原本使用struts2方式上传失败了- -!对此,我做了下面的处理
@Overridepublic void parse(HttpServletRequest request, String arg1) throws IOException { String url = request.getRequestURI().toString();//取得请求的URL if(url.indexOf("uploadWebApp.action")>0){//调用的是uploadWebApp.action方法 //不需要struts2的处理 }else{ //需要struts2的处理,调用回父类的方法 super.parse(request, arg1); }}
<struts><bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="myMultiPartRequest" class="com.MyMultiPartRequest" scope="default" optional="true"/><constant name="struts.multipart.handler" value="myMultiPartRequest" />
如果不想修改配置,可以使用servlet, 参考http://blog.chinaunix.net/uid-21162795-id-3247663.html
0 0
- 开发日志:struts2使用commons.fileupload上传附件,并解决upload.parseRequest(request)为空的问题
- 使用bootstrap-fileinput的问题:上传时upload.parseRequest(request)得到的List为空
- 解决文件上传时upload.parseRequest(request)得到的List为空
- upload.parseRequest(request)为空
- upload.parseRequest(request)为空
- struts2框架下upload.parseRequest(request)为空解决方案
- Android+struts上传文件时upload.parseRequest(request)为空
- fileItems=upload.parseRequest(request);//request为空的解决方法
- sturts2和kindeditor的文件上传,upload.parseRequest(request)得到的List为空
- parseRequest(request)为空的问题
- struts2 上传文件 parseRequest()解析request为空 解决办法
- struts2 上传文件 parseRequest()解析request为空 解决办法
- struts2 上传文件 parseRequest()解析request为空 解决办法
- struts2 上传文件 parseRequest()解析request为空 解决办法
- 解决upload.parseRequest(request) 为null的两个方法
- fileupload插件调用upload.parseRequest(request)解析得到空值问题
- fileupload插件调用upload.parseRequest(request)解析得到空值问题
- upload.parseRequest为空
- HTML5 跨文档通信 以及 WebSocket
- 自定义UIViewController与xib文件关系深入分析
- UTF-8文本文件头部出现乱码“锘*”的问题及解决方法
- vlc-android截屏以及录像功能的实现
- Android项目结构介绍
- 开发日志:struts2使用commons.fileupload上传附件,并解决upload.parseRequest(request)为空的问题
- Unity shader教程-第二课:Shader的框架和Properties详细介绍
- android应用仿QQ使用fragment来实现
- Linux curl使用简单介绍
- Java版数据结构与算法(二)
- nginx配置 thinkphp需要的pathinfo
- Android中Context详解 ---- 你所不知道的Context
- OAuth 2.0 授权
- runOnUiThread简单使用