注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 利用手机和电池实现反地心..
 帮助

webwork 多图片上传


2008-01-09 00:44:21
 标签:文件上传 webwork   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://maomao.blog.51cto.com/115985/58501
近期用webwork做项目,有上传文件操作,在此记录一下,有部分内容来自网络,javascript脚本只支持IE,不支持firefox。


 
一、FileUploadAction.java 文件;
 
package ebizserve.cpd.view.action;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
 
import org.apache.log4j.Logger;
 
import ebizserve.util.FileUtil;
 
public class FileUploadAction extends BaseAction {
 
    private Logger logger = Logger.getLogger(FileUploadAction.class);
 
    private static final long serialVersionUID = 5943699833329252614L;
 
    // 对应<input type=file name=fileImages />中的file控件name名称;
    private File[] fileImages;
 
    // 获取 文件名称为 fileImages file 控件上传文件的文件名称;
    private String[] fileImagesFileName;
 
    // 默认调用方法
    public String execute() {
 
       File[] newFileImages = FileUtil.renameToFiles(fileImagesFileName,
              fileImages);
 
       if (newFileImages != null && newFileImages.length > 0) {
 
           for (File file : newFileImages) {
              try {
                  if (!FileUtil.verifyFile(file, new String[] { "jpg", "gif",
                         "jpeg", "png" })) {
                     this.addFieldError("errorimage",
                            "Error:Invalid File Type");
                     return "create";
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
           }
 
           for (File fileImage : newFileImages) {
              try {
                  FileInputStream fileIn;
                  int filesize = 0;
 
                  String imageName = fileImage.getName();
                  fileIn = new FileInputStream(fileImage);
                  filesize = fileIn.available();
 
                  logger.info("获得文件名称: " + imageName);
                  logger.info("获得文件大小:" + filesize);
 
                  FileUtil.saveFile(fileImage, imageName,
                         getProductFilePath());
 
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              } catch (Exception e) {
                  e.printStackTrace();
              }
           }
       }
 
       return SUCCESS;
    }
 
    // 对应的 getXXX()/setXXX()方法;
    public File[] getFileImages() {
       return fileImages;
    }
 
    public void setFileImages(File[] fileImages) {
       this.fileImages = fileImages;
    }
 
    public String[] getFileImagesFileName() {
       return fileImagesFileName;
    }
 
    public void setFileImagesFileName(String[] fileImagesFileName) {
       this.fileImagesFileName = fileImagesFileName;
    }
 
}
 
 
 
二、BaseAction.java 文件;
 
package ebizserve.cpd.view.action;
 
import java.io.File;
 
import com.opensymphony.xwork.ActionSupport;
 
public class BaseAction extends ActionSupport {
 
    private static final long serialVersionUID = -2796680436059696842L;
 
    private static final String FILE_PATH = "d:/upload/";  // 文件realpath;
 
    public String getProductFilePath() {
       File filesPath = new File(FILE_PATH);
       if (!filesPath.exists()) { // (canRead()
           filesPath.mkdirs(); // mkdirs()
 
       }
       return FILE_PATH;
    }
 
}
 
 
 
三、FileUtil.java 文件;
package ebizserve.util;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
public class FileUtil {
 
    // 重命名文件;
    public static File[] renameToFiles(String[] fileNames, File[] files) {
       File[] retFiles = null;
       if (fileNames != null && fileNames.length > 0) {
           retFiles = new File[fileNames.length];
 
           for (int i = 0, n = fileNames.length; i < n; i++) {
              File dist = new File(fileNames[i]);
              files[i].renameTo(dist);
              retFiles[i] = dist;
           }
       }
       return retFiles;
    }
 
    // save文件;
    public static long saveFile(File file, String fileName, String filePath)
           throws Exception {
       if (file == null) {
           return 0;
       }
 
       File filepath = new File(filePath);
       if (!filepath.isDirectory())
           filepath.mkdirs();
       File filedesc = new File(filepath, fileName);
 
       return copyFile(file, filedesc);
    }
 
    // copy文件;
    public static long copyFile(File fromFile, File toFile) {
       long len = 0;
 
       InputStream in = null;
       OutputStream out = null;
       try {
           in = new FileInputStream(fromFile);
           out = new FileOutputStream(toFile);
           byte[] t = new byte[1024];
           int ii = 0;
           while ((ii = in.read(t)) > 0) {
              out.write(t, 0, ii);
              len += ii;
           }
 
       } catch (IOException e) {
           e.printStackTrace();
 
       } finally {
           if (in != null) {
              try {
                  in.close();
              } catch (Exception e) {
                  e.printStackTrace();
              }
           }
 
           if (out != null) {
              try {
                  out.close();
              } catch (Exception e) {
                  e.printStackTrace();
              }
           }
 
       }
 
       return len;
    }
 
    // 验证文件正确性;
    public static boolean verifyFile(File file, String[] exts) throws Exception {
       boolean flag = false;
       if (file != null) {
           String ext = getExtension(file.getName());
           if (ext == null) {
              return false;
           }
           if (exts != null && exts.length > 0) {
 
              if (exts[0].equals("*.*"))
                  return true;
              for (int i = 0; i < exts.length; i++) {
 
                  if (ext.equalsIgnoreCase(exts[i])) {
                     flag = true;
                     break;
                  }
              }
           }
       }
 
       return flag;
 
    }
 
    // 取得文件扩展名;
    public static String getExtension(String fileName) {
 
       int newEnd = fileName.length();
       int i = fileName.lastIndexOf('.', newEnd);
       if (i != -1) {
           return fileName.substring(i + 1, newEnd);
       } else {
           return null;
       }
    }
}