`
conkeyn
  • 浏览: 1512461 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

webwork上传文件

阅读更多

在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

jxl.jar可以到http://sourceforge.net/project/showfiles.php?group_id=79926 下载。

使用如下:

搭建环境

将下载后的文件解包,得到jxl.jar,然后和webwork运行所需要的所有包一并放入classpath,安装就完成了。

jsp代码(uploadFile.jsp):
jsp页面其实很简单,就一个input框放在一个form表单里,请注意着色部分:
form标签务必脚上加上enctype="multipart/form-data,
<input type=file name=fileImages />中的file控件name名称需要和
FileUpload.java中的着色部分保持一致,

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   <%@ taglib prefix="ww" uri="/webwork" %>
   <%
    String path = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Show case</title>
</head>
<body>
    <form action="<%=path %>/upload/doUpload.action" method="POST" enctype="multipart/form-data">    
    upload: <input type="file" name="fileImages">  
    <input type="submit" name="upload" value="upload">
<form>
</body>
</html>


 java代码(FileUpload.java ):

package com;

import java.io.*;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JFileChooser;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import org.apache.log4j.Logger;

import com.opensymphony.webwork.ServletActionContext;



public class FileUpload extends BaseAction1{
    /**
  *
  */
    private Logger logger = Logger.getLogger(FileUpload.class);
    
    private static final long serialVersionUID = 5943699833329252614L;

    // 对应<input type=file name=fileImages />中的file控件name名称
    private File[] fileImages;
    
    private File filepath;
    
    // 获取 文件名称 fileImages file 控件上传文件的文件名称;
    private String[] fileImagesFileName;
    FileInputStream fileIn;
    public String path;
    public String stringexcle;
    int filesize = 0;
    public FileInputStream getFileIn() {
  return fileIn;
    }

    public void setFileIn(FileInputStream fileIn) {
  this.fileIn = fileIn;
    }

    public int getFilesize() {
  return filesize;
    }

    public void setFilesize(int filesize) {
  this.filesize = filesize;
    }

    public String doUploadAction()  {

  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" ,"txt","xls"})) {
                       this.addFieldError("errorimage",
                              "Error:Invalid File Type");
                       return "create";
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
             }
  
             for (File fileImage : newFileImages) {
                try {
                    
                
                    String imageName = fileImage.getName();
                    fileIn = new FileInputStream(fileImage);
                    filesize = fileIn.available();
  
                    logger.info("获得文件名称: " + imageName);
                    logger.info("获得文件大小:" + filesize);
  
                    path=getProductFilePath();
                    FileUtil.saveFile(fileImage, imageName,
                           getProductFilePath());
  
                    stringexcle=readExcel(fileImage);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }
             }
         }
  
         return SUCCESS;

    }
    
    /**读取Excel文件的内容
  * @param file  待读取的文件
  * @return
  */
    public static String readExcel(File file){
  StringBuffer sb = new StringBuffer();
  
  Workbook wb = null;
  try {
      //构造Workbook(工作薄)对象
      wb=Workbook.getWorkbook(file);
  } catch (BiffException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
  }
  
  if(wb==null)
      return null;
  
  //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
  Sheet[] sheet = wb.getSheets();
  
  if(sheet!=null&&sheet.length>0){
      //对每个工作表进行循环
      for(int i=0;i<sheet.length;i++){
    //得到当前工作表的行数
    int rowNum = sheet[i].getRows();
    for(int j=0;j<rowNum;j++){
        //得到当前行的所有单元格
        Cell[] cells = sheet[i].getRow(j);
        if(cells.length>0){
      //对每个单元格进行循环
      for(int k=0;k<cells.length;k++){
          //读取当前单元格的值
          String cellValue = cells[k].getContents();
          sb.append(cellValue+"\t");
      }
        }
        sb.append("\r\n");
    }
    sb.append("\r\n");
      }
  }
  //最后关闭资源,释放内存
  wb.close();
  return sb.toString();
    }

    
    //得到文件路径  
    public File getSelectedFile()
    {
    JFileChooser jfc = new JFileChooser();
    
    int returnVal = jfc.showSaveDialog(null);
    //得出文件路径
    if(returnVal == JFileChooser.APPROVE_OPTION )
    {
  System.out.println("The path of the files:"+jfc.getSelectedFile().getName());
  
    }
    return jfc.getSelectedFile();
    }
    public void searchAction(){
  HttpServletResponse response = ServletActionContext.getResponse();
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out;
  String fileImages = ServletActionContext.getRequest().getParameter("fileImages");//从JSP页面拿值
//  String[] fileImages=null;
  System.out.println(fileImages);
  try {
      out = ServletActionContext.getResponse().getWriter();
//      for(int i=0;i<fileImages.length;i++){
        out.println("<input type='file' value='"+fileImages+"' name='uploadFiles'>");
//      }
  out.flush();
  out.close();
  } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
  }
    }
    
    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;
    }

    public String getPath() {
  return path;
    }

    public void setPath(String path) {
  this.path = path;
    }

    public File getFilepath() {
  return filepath;
    }

    public void setFilepath(File filepath) {
  this.filepath = filepath;
    }

    public String getStringexcle() {
  return stringexcle;
    }

    public void setStringexcle(String stringexcle) {
  this.stringexcle = stringexcle;
    }
}

 FileUtil.java :

package com;

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;
       }
    }
}

 BaseAction1.java :

package com;

import java.io.File;

import com.opensymphony.xwork.ActionSupport;

public class BaseAction1 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;
    }

}

 webwork.properties


# 保存的目录缺省使用 javax.servlet.context.tempdir
webwork.multipart.saveDir= javax.servlet.context.tempdir
webwork.multipart.maxSize=102400000

# 文件上传设置
# 用来处理HTTP POST请求,编码使用MIME-type multipart/form-data方式的
webwork.multipart.parser=jakarta

# 指定locale,编码
webwork.i18n.encoding=UTF-8
webwork.custom.i18n.resources=messages,acl,definition

# 开发模式设定
webwork.devMode = false

# 配置自动更新设定
webwork.configuration.xml.reload=true

# 国际化资源设定
webwork.i18n.reload=true


xwork.xml:



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
    <include file="webwork-default.xml" />
   
    <!-- 引用多个 xwork_*.xml -->
    <include file="xwork_upload.xml" />
</xwork>

xwork_upload.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
    <package name="upload" extends="webwork-default" namespace="/upload">

       <interceptors>
           <interceptor name="upload"
              class="com.opensymphony.webwork.interceptor.FileUploadInterceptor">
              <param name="maximumSize">10000000</param>
           </interceptor>
           <interceptor-stack name="uploadStack">
              <interceptor-ref name="upload" />
              <interceptor-ref name="defaultStack" />
           </interceptor-stack>
       </interceptors>
       <default-interceptor-ref name="WSStack" />

       <action name="doUpload"
           class="com.FileUpload" method="doUploadAction">
           <interceptor-ref name="params" /><!-- 将请求中的参数设置到Action中去 -->
           <interceptor-ref name="basicStack" />
           <interceptor-ref name="uploadStack" />
           <result name="success">
              <param name="location">/success.jsp</param>
           </result>
       </action>
    </package>
</xwork>


success.jsp:



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="/webwork" prefix="ww" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Showcase</title>
</head>

<body>
<h1>Fileupload sample</h1>
    <ul>
        <li>ContentType: <ww:property value="filesize" /></li>
        <li>FileName: <ww:property value="path" /></li>
        <li>File: <ww:property value="filepath" /></li>
    </ul>
</body>
</html>

分享到:
评论

相关推荐

    webwork中上传文件

    在Web开发中,上传文件是一项常见的功能。在本例中,我们关注的是使用WebWork框架在Java环境中实现文件上传。WebWork是一个轻量级的MVC(Model-View-Controller)框架,它提供了处理HTTP请求和响应的强大工具,包括...

    webwork 上传文件与下载文件 使用笔记

    项目里需要实现webwork 上传与下载文件操作, 自己摸索过程中出现了很多问题,一一解决, 记录下来本准备做参考,现贡献给大家, 记得有点乱,耐心看完,一定会有帮助的。

    webwork上传下载

    此外,"webwork上传文件.txt"可能是一个文本文件,其中包含了WebWork文件上传的源代码示例。通常,这样的文件会包含Action类的代码,展示如何处理上传的文件,包括获取`Part`对象,验证文件,以及将文件保存到服务器...

    webwork文件上传

    在本教程中,我们将探讨如何利用WebWork实现文件上传功能,特别是针对Excel文件的处理。 首先,理解WebWork的MVC模式至关重要。在WebWork框架中,控制器负责接收用户请求,调用业务逻辑,并将结果传递给视图进行...

    WebWork 文件上传

    避免文件名冲突、防止恶意文件上传(如脚本或病毒),以及对上传文件的访问权限控制都是需要考虑的因素。 在这个范例中,"uploadfile"可能是用来演示如何处理上传的文件的代码或示例文件。可能包含一个ActionForm类...

    webwork上传操作说明

    webwork上传文件pdf文件说明文档

    webwork 多文件上传

    其中,`UploadFile`是一个自定义的类,用于封装上传文件的信息,如文件名、原始文件名、文件大小等。 3. **文件上传组件** WebWork并没有内置的文件上传处理组件,因此我们需要借助第三方库,如Apache Commons ...

    webwork的上传和下载的Demo

    例如,你需要验证上传文件的大小和类型,防止恶意文件或过大文件导致服务器问题。同时,下载链接应该有限期,以避免未授权的访问。 6. **错误处理**:在上传或下载过程中可能会遇到各种错误,如文件过大、网络中断...

    webwork 文件上传下载

    本篇文章将围绕"webwork 文件上传下载"这个主题,深入探讨WebWork框架下如何实现文件的上传和下载。 首先,让我们了解文件上传的基本概念。在Web应用中,文件上传通常涉及HTML表单、HTTP协议和服务器端处理。在...

    webwork+ibatis上传文件简单实例

    接着,创建一个`FileUploadAction`类,该类继承自WebWork的Action基类,并包含一个用于存储上传文件的临时字段。iBatis的SqlMapClient可以用来处理文件存储到数据库的操作: ```java public class FileUploadAction...

    fileupload+dwr2+webwork2实现带进度条上传文件

    "fileupload+dwr2+webwork2实现带进度条上传文件"这个主题涉及到三个关键技术和组件:FileUpload、Direct Web Remoting (DWR) 和 WebWork2,它们协同工作以提供一个带有进度条的高效、用户友好的文件上传体验。...

    使用webwork上传excel并导入数据库

    总之,使用WebWork上传Excel并导入MySQL数据库是一项常见的任务,涉及到前端交互、文件上传处理、Excel解析和数据库操作等多个技术领域。理解并熟练掌握这些知识点对于开发企业级应用至关重要。在实践中,不断优化和...

    WebWork2.2.7之简单文件上传

    在WebWork的动作类中,我们可以使用`org.apache.struts.upload.FormFile`或WebWork自己的`com.opensymphony.webwork上传.FileUploadActionSupport`来接收和处理上传的文件。以下是一个简单的WebWork2.2.7动作类示例...

    WebWork上传下载功能小记.pdf

    注意`enctype="multipart/form-data"`,这是上传文件时必须的属性。 2. **后台Action**:在对应的Action类中,我们需要创建三个属性:`uploadFiles`用于接收文件对象,`uploadFilesFileName`用于存储文件名,`...

    使用webwork实现上传图片并显示

    注意`enctype="multipart/form-data"`,这是上传文件时必需的属性。 2. **配置WebWork** 在WebWork的配置文件(如`struts.xml`或`xwork.xml`)中,我们需要定义一个Action,用于处理上传请求。比如: ```xml ...

    Webwork 实现文件上传下载代码详解

    本文主要从三个方面给大家介绍webwork文件上传下载知识,包括以下三个方面: 1. 包装 Request 请求 2. 获取文件上传的解析类 3. 项目实战配置和使用 Web上传和下载应该是很普遍的一个需求,无论是小型网站还是大...

    WebWork上传下载

    在WebWork中实现文件上传和下载是常见的功能需求,下面将详细介绍这两个过程以及可能遇到的问题。 **一、WebWork文件上传** 1. **前端页面** 在HTML页面中,你需要创建一个`&lt;input type="file"&gt;`标签让用户选择要...

    webwork2.2.7在action中利用commons-fileupload.jar进行上传或直接读取文件流的配置与源代码及实例详解

    在这个教程中,我们将探讨如何在WebWork 2.2.7的Action中利用Apache Commons FileUpload库来实现文件上传功能,并处理文件流。Apache Commons FileUpload是一个强大的库,专门用于处理HTTP请求中的多部分/表单数据,...

    webwork2个人学习总结

    - 通过`&lt;include&gt;`节点,可以引入其他配置文件,如`webwork-default.xml`,这有助于将配置进行模块化,保持配置文件的清晰和可维护性。 - `&lt;package&gt;`节点定义了一个包,可以理解为一个命名空间或一组相关Action的...

Global site tag (gtag.js) - Google Analytics