这个问题主要出现在上传文件时parseRequest()的值为空,原因是struts2的Filter拦截了。
- ServletFileUpload sfu= new ServletFileUpload(factory);
- List fileList= sfu.parseRequest(request);
解决办法一、
修改一下web.xml配置
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!--改为-->
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*.action</url-pattern>
- </filter-mapping>
解决办法二、
- 一、在项目中添加commons-fileupload-1.x.x.jar、commons-io-1.x.x.jar两个包
- 二、把页面中form表单的enctype属性设置为:”multipart/form-data”,并设置method属性值为:post。否则不会编译成功的。
- 三、便是在action中编写以下代码:
- private File uploadFile; //得到上传的文件
- private String uploadFileContentType; //得到文件的类型
- private String uploadFileFileName; //得到上传文件名称
- public File getUploadFile() {
- return uploadFile;
- }
- public void setUploadFile(File uploadFile) {
- System.out.println("文件"+uploadFile);
- this.uploadFile = uploadFile;
- }
- public String getUploadFileContentType() {
- return uploadFileContentType;
- }
- public void setUploadFileContentType(String uploadFileContentType) {
- this.uploadFileContentType = uploadFileContentType;
- }
- public String getUploadFileFileName() {
- return uploadFileFileName;
- }
- public void setUploadFileFileName(String uploadFileFileName) {
- this.uploadFileFileName = uploadFileFileName;
- }
- /**
- * @return
- */
- public String uploadFile() throws Exception {
- String realpath=ServletActionContext.getServletContext().getRealPath("/p_w_picpaths");
- System.out.println("上传文件名称:"+uploadFileFileName);
- //自定义上传文件名称
- uploadFileFileName="测试哈"+uploadFileFileName.substring(uploadFileFileName.lastIndexOf("."));
- System.out.println("上传文件类型:"+uploadFileContentType);
- System.out.println("要上传的路径:"+realpath);
- File file=new File(realpath);
- if(!file.exists())file.mkdirs();
- FileUtils.copyFile(uploadFile, new File(file,uploadFileFileName));
- return "sc";
- }
转载于:https://blog.51cto.com/liyongyao/852483