博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webwork上传文件
阅读量:2455 次
发布时间:2019-05-10

本文共 10468 字,大约阅读时间需要 34 分钟。

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

jxl.jar可以到 下载。
使用如下:
搭建环境
将下载后的文件解包,得到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();%>    Show case    
upload:

 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;    // 对应中的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
0){ //对每个单元格进行循环 for(int k=0;k
");// } 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>

转载地址:http://uzdhb.baihongyu.com/

你可能感兴趣的文章
sysadmin默认密码_sysadmin的SELinux指南:42个主要问题的答案
查看>>
sysadmin默认密码_sysadmin的Ansible指南:如何简化任务
查看>>
linux开源游戏_适用于Linux的5个开源策略和模拟游戏
查看>>
开源语法解释器_抓住机会解释开源
查看>>
sonic pi_前5名:Linux,Sonic Pi,LibreOffice等
查看>>
owncloud_本周热门文章5:ownCloud创始人专访,Raspberry Pi上的Docker等
查看>>
前5名:来自Docker CEO的一句话,来自Scratch的Linux等
查看>>
开源意义_有用的陌生人和开源的意义
查看>>
最佳 开源 人脸识别算法_2014年最佳开源教程
查看>>
foss测试_2014年FOSS十大法律发展
查看>>
本周最热门的5篇文章:Raspberry Pi A +,Ansible和Jen的Linux历程
查看>>
owncloud_一周前五篇文章:Linux理念,ownCloud集成等
查看>>
最佳 开源 人脸识别算法_本周最佳5篇文章:今年最佳开源,以及更多
查看>>
firefox 开源_一周最热门的5篇文章:移动版Firefox OS和年度开源奇迹
查看>>
18年开源前端框架排名_2014年排名前20位的开源故事
查看>>
十大开源项目_2014年十大开源访谈
查看>>
展望2019年_感谢您创纪录的一年(并展望2015年)
查看>>
十大开源项目_2014年十大开源项目
查看>>
fedora28 阿里云_Fedora 21带给开源云的6件事
查看>>
go开源项目整理-新手篇_一周的前5篇文章:您正在从事什么开源项目?
查看>>