package upload;

import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.*;
import java.awt.*;
import java.net.*;
import java.applet.*;
import java.sql.*;

//缩略图类,  
//本java类能将jpg图片文件,进行等比或非等比的大小转换。  
//具体使用方法  
//s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))  
public class DwindlePic {

    String InputDir; 
// 输入图路径
    String OutputDir; // 输出图路径
    String InputFileName; // 输入图文件名
    String OutputFileName; // 输出图文件名
    int OutputWidth = 80// 默认输出图片宽
    int OutputHeight = 80// 默认输出图片高
    int rate = 0;
    
boolean proportion = true// 是否等比缩放标记(默认为等比缩放)

    
public DwindlePic() {
        
// 初始化变量
        InputDir = "";
        OutputDir 
= "";
        InputFileName 
= "";
        OutputFileName 
= "";
        OutputWidth 
= 80;
        OutputHeight 
= 80;
        rate 
= 0;
    }

    
public boolean s_pic() {
        
// BufferedImage image;
        
// String NewFileName;
        
// 建立输出文件对象
        File file = new File(OutputDir + OutputFileName);
        FileOutputStream tempout 
= null;
        
try {
            tempout 
= new FileOutputStream(file);
        } 
catch (Exception ex) {
            System.out.println(ex.toString());
        }
        Image img 
= null;
        Toolkit tk 
= Toolkit.getDefaultToolkit();
        Applet app 
= new Applet();
        MediaTracker mt 
= new MediaTracker(app);
        
try {
            img 
= tk.getImage(InputDir + InputFileName);
            mt.addImage(img, 
0);
            mt.waitForID(
0);
        } 
catch (Exception e) {
            e.printStackTrace();
        }
        
if (img.getWidth(null== -1) {
            System.out.println(
" can't read,retry!" + "<BR>");
            
return false;
        } 
else {
            
int new_w;
            
int new_h;
            
if (this.proportion == true) { // 判断是否是等比缩放.
                
// 为等比缩放计算输出的图片宽度及高度
                double rate1 = ((double) img.getWidth(null)) / (double) OutputWidth + 0.1;
                
double rate2 = ((double) img.getHeight(null)) / (double) OutputHeight + 0.1;
                
double rate = rate1 > rate2 ? rate1 : rate2;
                new_w 
= (int) (((double) img.getWidth(null)) / rate);
                new_h 
= (int) (((double) img.getHeight(null)) / rate);
            } 
else {
                new_w 
= OutputWidth; // 输出的图片宽度
                new_h = OutputHeight; // 输出的图片高度
            }
            BufferedImage buffImg 
= new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);

            Graphics g 
= buffImg.createGraphics();

            g.setColor(Color.white);
            g.fillRect(
00, new_w, new_h);

            g.drawImage(img, 
00, new_w, new_h, null);
            g.dispose();

            JPEGImageEncoder encoder 
= JPEGCodec.createJPEGEncoder(tempout);
            
try {
                encoder.encode(buffImg);
                tempout.close();
            } 
catch (IOException ex) {
                System.out.println(ex.toString());
            }
        }
        
return true;
    }

    
public boolean s_pic(String InputDir, String OutputDir, String InputFileName, String OutputFileName) {
        
// 输入图路径
        this.InputDir = InputDir;
        
// 输出图路径
        this.OutputDir = OutputDir;
        
// 输入图文件名
        this.InputFileName = InputFileName;
        
// 输出图文件名
        this.OutputFileName = OutputFileName;
        
return s_pic();
    }

    
public boolean s_pic(String InputDir, String OutputDir, String InputFileName, String OutputFileName, int width, int height, boolean gp) {
        
// 输入图路径
        this.InputDir = InputDir;
        
// 输出图路径
        this.OutputDir = OutputDir;
        
// 输入图文件名
        this.InputFileName = InputFileName;
        
// 输出图文件名
        this.OutputFileName = OutputFileName;
        
// 设置图片长宽
        setW_H(width, height);
        
// 是否是等比缩放 标记
        this.proportion = gp;
        
return s_pic();
    }

    
public void setInputDir(String InputDir) {
        
this.InputDir = InputDir;
    }

    
public void setOutputDir(String OutputDir) {
        
this.OutputDir = OutputDir;
    }

    
public void setInputFileName(String InputFileName) {
        
this.InputFileName = InputFileName;
    }

    
public void setOutputFileName(String OutputFileName) {
        
this.OutputFileName = OutputFileName;
    }

    
public void setOutputWidth(int OutputWidth) {
        
this.OutputWidth = OutputWidth;
    }

    
public void setOutputHeight(int OutputHeight) {
        
this.OutputHeight = OutputHeight;
    }

    
public void setW_H(int width, int height) {
        
this.OutputWidth = width;
        
this.OutputHeight = height;
    }

    
public static void main(String[] a) {
        
// s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度)
        DwindlePic mypic = new DwindlePic();
        System.out.println(mypic.s_pic(
"d:/""d:/""200.jpg""bbb.jpg"13080true));
    }
}

ACTION:
package upload;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 文件上传类,图片类型,txt类型,zip类型
 * 
 * 
@author Administrator
 * 
 
*/
public class Upload extends ActionSupport {

    
private static final long serialVersionUID = -8204063374280945416L;

    
private File upload;// 路径
    private String uploadFileName;// 原文件名
    private String uploadContentType;// 文件类型
    private String imagePath;// 配置图片路径
    private String image_smallPath;// 配置小图片路径
    private String file_zipPath;// 配置文件路径
    private String image_smalllook;
    
private String imagePath_look;
    
private String file_zip_look;

    
public String upload() throws Exception {

        
// FileUtils.copyFile(doc, target);
        File image = new File(getImagePath());
        
if (!image.exists()) {
            image.mkdir();
        }
        File image_small 
= new File(getImage_smallPath());
        
if (!image_small.exists()) {
            image_small.mkdir();
        }
        File file_zip 
= new File(getFile_zipPath());
        
if (!file_zip.exists()) {
            file_zip.mkdir();
        }
        
// 得到上传文件的后缀名
        String uploadName = getUploadContentType();
        String lastuploadName 
= uploadName.substring(uploadName.indexOf("/"+ 1, uploadName.length());
        
// 得到文件的新名字
        String fileNewName = generateFileName(getUploadFileName());
        
if (lastuploadName.equals("jpeg")) {
            System.out.println(
"图片类型文件");
            
// 创建文件
            FileOutputStream fos = new FileOutputStream(getImagePath() + "/" + fileNewName);
            FileInputStream fis 
= new FileInputStream(getUpload());
            
byte[] buffer = new byte[1024];
            
int len = 0;
            
while ((len = fis.read(buffer)) > 0) {
                fos.write(buffer, 
0, len);
            }
            DwindlePic mypic 
= new DwindlePic();
            
// s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度)
            mypic.s_pic(getImagePath() + "/", getImage_smallPath() + "/", fileNewName, fileNewName, 12080true);
        } 
else {
            System.out.println(
"其他类型文件");
            
// 创建文件
            FileOutputStream fos = new FileOutputStream(getFile_zipPath() + "/" + fileNewName);
            FileInputStream fis 
= new FileInputStream(getUpload());
            
byte[] buffer = new byte[1024];
            
int len = 0;
            
while ((len = fis.read(buffer)) > 0) {
                fos.write(buffer, 
0, len);
            }
        }
        imagePath_look 
= imagePath + "/" + fileNewName;
        image_smalllook 
= image_smallPath + "/" + fileNewName;
        file_zip_look 
= file_zipPath + "/" + fileNewName;
        System.out.println(imagePath_look);
        System.out.println(image_smalllook);
        System.out.println(file_zip_look);

        
return SUCCESS;
    }
    
/**
     * 重命名文件
     * 
     * 
@param fileName
     * 
@return
     
*/
    
private String generateFileName(String fileName) {
        DateFormat format 
= new SimpleDateFormat("yyMMddHHmmss");
        String formatDate 
= format.format(new Date());

        
int random = new Random().nextInt(10000);

        
int position = fileName.lastIndexOf(".");
        String extension 
= fileName.substring(position);

        
return formatDate + random + extension;
    }

    
public File getUpload() {
        
return upload;
    }

    
public void setUpload(File upload) {
        
this.upload = upload;
    }

    
public String getUploadFileName() {
        
return uploadFileName;
    }

    
public void setUploadFileName(String uploadFileName) {
        
this.uploadFileName = uploadFileName;
    }

    
public String getUploadContentType() {
        
return uploadContentType;
    }

    
public void setUploadContentType(String uploadContentType) {
        
this.uploadContentType = uploadContentType;
    }

    
public String getImagePath() {
        
return ServletActionContext.getServletContext().getRealPath(imagePath);
    }

    
public void setImagePath(String imagePath) {
        
this.imagePath = imagePath;
    }

    
public String getImage_smallPath() {
        
return ServletActionContext.getServletContext().getRealPath(image_smallPath);
    }

    
public void setImage_smallPath(String imageSmallPath) {
        image_smallPath 
= imageSmallPath;
    }

    
public String getFile_zipPath() {
        
return ServletActionContext.getServletContext().getRealPath(file_zipPath);
    }

    
public void setFile_zipPath(String fileZipPath) {
        file_zipPath 
= fileZipPath;
    }

    
public String getImage_smalllook() {
        
return image_smalllook;
    }

    
public void setImage_smalllook(String imageSmalllook) {
        image_smalllook 
= imageSmalllook;
    }

    
public String getImagePath_look() {
        
return imagePath_look;
    }

    
public void setImagePath_look(String imagePathLook) {
        imagePath_look 
= imagePathLook;
    }

    
public String getFile_zip_look() {
        
return file_zip_look;
    }

    
public void setFile_zip_look(String fileZipLook) {
        file_zip_look 
= fileZipLook;
    }

}

Struts.xml
<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC  
         
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
         
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    
<package name="upload" namespace="/imager" extends="struts-default">
        
<!-- 配置处理文件上传的Action -->
        
<action name="upload" class="upload.UploadAction" method="upload">
            
<interceptor-ref name="fileUpload">
                
<!-- 通过动态设置allowTypes的属性来动态指定允许上传的文件类型 -->
                
<param name="allowTypes">
                    image
/png,image/gif,image/jpeg,
                    application
/zip,application/vnd.ms-word,text/plain        
            
</param>
                
<param name="maximumSize">50485760</param>
            
</interceptor-ref>
            
<interceptor-ref name="defaultStack" />
            
<!-- 动态设置Action的属性值 -->
            
<param name="imagePath">/image</param>
            
<param name="image_smallPath">/image_small</param>
            
<param name="file_zipPath">/file</param>
            
<!-- 配置Struts2默认的视图资源 -->
            
<result>/success.jsp</result>
            
<!-- 配置该应用的input逻辑视图 -->
            
<result name="input"> /index.jsp</result>
        
</action>

        
<action name="download" class="upload.DownloadAction">

            
<result type="stream">

                
<param name="contentType">application/octet-stream</param>

                
<param name="inputName">inputStream</param>

                
<param name="contentDisposition">attachment;filename="${fileName}"</param>

                
<param name="bufferSize">4096</param>

            
</result>

        
</action>

    
</package>
</struts>

页面:
<%@ page language="java"  pageEncoding="utf-8"%>  
 
<%@ taglib prefix="s" uri="/struts-tags" %>  
   
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
 
<html>  
   
<head>  
    
       
     
<title>My JSP 'index.jsp' starting page</title>  
     
<meta http-equiv="pragma" content="no-cache">  
     
<meta http-equiv="cache-control" content="no-cache">  
     
<meta http-equiv="expires" content="0">      
     
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
     
<meta http-equiv="description" content="This is my page">  
     
<!--  
     
<link rel="stylesheet" type="text/css" href="styles.css">  
     
-->  
   
</head>  
   
<s:form method="post" action="imager/upload" enctype="multipart/form-data">  
   
<s:textfield name="title" label="title"></s:textfield>  
   
<s:file name="upload" label="file"></s:file>  
   
<s:submit></s:submit>  
   
</s:form>  
   
<body>  
   
   
</body>  
 
</html>

以下是经过修改的图片上传接口

工具类:
package upload;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

public class uploadUtil {

    
private final static String imagePath="/image";// 配置图片路径
    private final static String image_smallPath="/image_small";// 配置小图片路径
    private final static String file_zipPath="/file";// 配置文件路径
    public String uploadImage1(HttpServletRequest request, File getUpload, String getUploadContentType,
            String getUploadFileName) 
throws IOException {
        String getImagePath 
= request.getRealPath(imagePath);
        String getImage_smallPath 
= request.getRealPath(image_smallPath);

        File image 
= new File(getImagePath);
        
if (!image.exists()) {
            image.mkdir();
        }
        File image_small 
= new File(getImage_smallPath);
        
if (!image_small.exists()) {
            image_small.mkdir();
        }
        
// 得到上传文件的后缀名
        String uploadName = getUploadContentType;
        String lastuploadName 
= uploadName.substring(uploadName.indexOf("/"+ 1, uploadName.length());
        
// 得到文件的新名字
        String fileNewName = generateFileName(getUploadFileName);

        FileOutputStream fos 
= new FileOutputStream(getImagePath + "/" + fileNewName);
        FileInputStream fis 
= new FileInputStream(getUpload);
        
byte[] buffer = new byte[1024];
        
int len = 0;
        
while ((len = fis.read(buffer)) > 0) {
            fos.write(buffer, 
0, len);
        }
        DwindlePic mypic 
= new DwindlePic();
        
// s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度)
        mypic.s_pic(getImagePath + "/", getImage_smallPath + "/", fileNewName, fileNewName, 12080true);

        
return imagePath + "/" + fileNewName;

    }

    
public String uploadfile(ServletActionContext context,File getUpload, String getUploadContentType,
            String getUploadFileName) 
throws IOException {
        
        String getFile_zipPath 
= context.getServletContext().getRealPath(file_zipPath);
        File file_zip 
= new File(getFile_zipPath);
        
if (!file_zip.exists()) {
            file_zip.mkdir();
        }
        
// 得到上传文件的后缀名
        String uploadName = getUploadContentType;
        String lastuploadName 
= uploadName.substring(uploadName.indexOf("/"+ 1, uploadName.length());
        
// 得到文件的新名字
        String fileNewName = generateFileName(getUploadFileName);
        
// 创建文件
        FileOutputStream fos = new FileOutputStream(getFile_zipPath + "/" + fileNewName);
        FileInputStream fis 
= new FileInputStream(getUpload);
        
byte[] buffer = new byte[1024];
        
int len = 0;
        
while ((len = fis.read(buffer)) > 0) {
            fos.write(buffer, 
0, len);
        }
        
return file_zipPath + "/" + fileNewName;

    }

    
/**
     * 重命名文件
     * 
     * 
@param fileName
     * 
@return
     
*/
    
private String generateFileName(String fileName) {
        DateFormat format 
= new SimpleDateFormat("yyMMddHHmmss");
        String formatDate 
= format.format(new Date());

        
int random = new Random().nextInt(10000);

        
int position = fileName.lastIndexOf(".");
        String extension 
= fileName.substring(position);

        
return formatDate + random + extension;
    }
}
页面:
<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC  
         
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
         
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    
<package name="upload" namespace="/imager" extends="struts-default">
        
<!-- 配置处理文件上传的Action -->
        
<action name="upload" class="upload.UploadAction" method="upload">
            
<interceptor-ref name="fileUpload">
                
<!-- 通过动态设置allowTypes的属性来动态指定允许上传的文件类型 -->
                
<param name="allowTypes">
                    image
/png,image/gif,image/jpeg,
                    application
/zip,application/vnd.ms-word,text/plain        
            
</param>
                
<param name="maximumSize">50485760</param>
            
</interceptor-ref>
            
<interceptor-ref name="defaultStack" />
            
<!-- 动态设置Action的属性值 
            
<param name="imagePath">/image</param>
            
<param name="image_smallPath">/image_small</param>
            
<param name="file_zipPath">/file</param>
            
            
-->
            
<!-- 配置Struts2默认的视图资源 -->
            
<result>/success.jsp</result>
            
<!-- 配置该应用的input逻辑视图 -->
            
<result name="input"> /index.jsp</result>
        
</action>

        
<action name="download" class="upload.DownloadAction">

            
<result type="stream">

                
<param name="contentType">application/octet-stream</param>

                
<param name="inputName">inputStream</param>

                
<param name="contentDisposition">attachment;filename="${fileName}"</param>

                
<param name="bufferSize">4096</param>

            
</result>

        
</action>

    
</package>
</struts>
Action:
package upload;

import java.io.File;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 文件上传类,图片类型,txt类型,zip类型
 * 
 * 
@author Administrator
 * 
 
*/

public class UploadAction extends ActionSupport {

    
private static final long serialVersionUID = -8204063374280945416L;

    
private File upload;// 路径
    private String uploadFileName;// 原文件名
    private String uploadContentType;// 文件类型

    
public String upload() throws Exception {
           uploadUtil uploadutil
=new uploadUtil();
           HttpServletRequest request 
= ServletActionContext.getRequest();
           
           uploadutil.uploadImage1(request, getUpload(), getUploadContentType(), getUploadFileName());

        
return SUCCESS;
    }


    
public File getUpload() {
        
return upload;
    }


    
public void setUpload(File upload) {
        
this.upload = upload;
    }


    
public String getUploadFileName() {
        
return uploadFileName;
    }


    
public void setUploadFileName(String uploadFileName) {
        
this.uploadFileName = uploadFileName;
    }


    
public String getUploadContentType() {
        
return uploadContentType;
    }


    
public void setUploadContentType(String uploadContentType) {
        
this.uploadContentType = uploadContentType;
    }

    
}


因为无法得到ServletActionContext
ServletActionContext context=(ServletActionContext) ServletActionContext.getServletContext();
 context.getServletContext().getRealPath(path);
所以使用
HttpServletRequest request = ServletActionContext.getRequest();
request.getRealPath(path);