使用jquery uploadify组件的时候遇到上传成功,但是没有上传到服务器文件 原因HttpServletRequest变成MultiPartRequestWrapper为空,即源代码: DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(20 * 1024 * 1024); //设定使用内存超过5M时,将产生临时文件并存储于临时目录中。 factory.setRepository(new File(tempPath)); //设定存储临时文件的目录。 ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); try { List items = upload.parseRequest(request); Iterator itr = items.iterator(); //itr为空 原因就是因为在web.xml中配置了Struts的filter <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> 在配置文件中修改如下: <constant name="struts.action.extension" value="action"></constant>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> <% String path = request.getContextPath(); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Uploadify上传</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <link rel="stylesheet" href="<%=path %>/uploadify/uploadify.css" type="text/css"></link> <script type="text/javascript" src="<%=path %>/uploadify/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="<%=path %>/uploadify/jquery.uploadify-3.1.min.js"></script> <script type="text/javascript"> $(function() { $("#file_upload").uploadify({ 'height' : 27, 'width' : 80, 'buttonText' : '浏 览', 'swf' : '<%=path%>/uploadify/uploadify.swf', 'uploader' : '<%=path%>/servlet/AjaxUpload', 'auto' : false, 'fileTypeExts' : '*.jpg', 'formData' : {'userName':'','qq':''}, 'onUploadStart' : function(file) { //校验 var name=$('#userName').val(); if(name.replace(/\s/g,'') == ''){ alert("名称不能为空!"); return false; } //校验 var qq=$('#qq').val(); if(qq.replace(/\s/g,'') == ''){ alert("QQ不能为空!"); return false; } $("#file_upload").uploadify("settings", "formData", {'userName':name,'qq':qq}); //$("#file_upload").uploadify("settings", "qq", ); } }); }); </script> </head> <body> 名称: <input type="text" id="userName" name="userName" value="妞见妞爱"> <br> QQ: <input type="text" id="qq" name="qq" value="464344269"> <br> <input type="file" name="uploadify" id="file_upload" /> <hr> <a href="javascript:$('#file_upload').uploadify('upload','*')">开始上传</a> <a href="javascript:$('#file_upload').uploadify('cancel', '*')">取消所有上传</a> </body> </html>
/** * AjaxUpload.java * com.zte.ace.util * * Function: TODO * * ver date author * ────────────────────────────────── * Jun 13, 2012 程仁银 * * Copyright (c) 2012, All Rights Reserved. */ package com.zte.ace.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Random; 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.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class AjaxUpload extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; //上传文件的保存路径 protected String configPath = "upload/widget"; protected String dirTemp = "upload/widget/temp"; protected String dirName = "file"; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("request = "+request+" ### response = "+response); request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); //文件保存目录路径 String savePath = this.getServletContext().getRealPath("/") + configPath; // 临时文件目录 String tempPath = this.getServletContext().getRealPath("/") + dirTemp; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM"); String ymd = sdf.format(new Date()); savePath += "/" + ymd + "/"; //创建文件夹 File dirFile = new File(savePath); if (!dirFile.exists()) { dirFile.mkdirs(); } tempPath += "/" + ymd + "/"; //创建临时文件夹 File dirTempFile = new File(tempPath); if (!dirTempFile.exists()) { dirTempFile.mkdirs(); } DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(20 * 1024 * 1024); //设定使用内存超过5M时,将产生临时文件并存储于临时目录中。 factory.setRepository(new File(tempPath)); //设定存储临时文件的目录。 System.out.println("factory = " +factory); ServletFileUpload upload = new ServletFileUpload(factory); System.out.println("upload = " +upload); upload.setHeaderEncoding("UTF-8"); try { List items = upload.parseRequest(request); System.out.println("items = " + items); Iterator itr = items.iterator(); String name = ""; String qq = ""; System.out.println("111111111111111111111111111111111111"); while (itr.hasNext()) { System.out.println("2222222222222222222222222222222222"); FileItem item = (FileItem) itr.next(); String fileName = item.getName(); long fileSize = item.getSize(); if (!item.isFormField()) { String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt; try{ File uploadedFile = new File(savePath, newFileName); /* * 第一种方法 * * 好处: 一目了然..简单啊... * 弊端: 这种方法会导致上传的文件大小比原来的文件要大 * * 推荐使用第二种 */ //item.write(uploadedFile); //-------------------------------------------------------------------- //第二种方法 OutputStream os = new FileOutputStream(uploadedFile); InputStream is = item.getInputStream(); byte buf[] = new byte[1024];//可以修改 1024 以提高读取速度 int length = 0; while( (length = is.read(buf)) > 0 ){ os.write(buf, 0, length); } //关闭流 os.flush(); os.close(); is.close(); System.out.println("上传成功!路径:"+savePath+"/"+newFileName); out.print("1"); }catch(Exception e){ e.printStackTrace(); } }else { String filedName = item.getFieldName(); if (filedName.equals("userName")) { name = item.getString(); }else { qq = item.getString(); } System.out.println("FieldName:"+filedName); System.out.println("String:"+item.getString()); //System.out.println("String():"+item.getString(item.getName())); System.out.println("==============="); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } out.flush(); out.close(); } }