OABaseReadExeclDataAction .class
包含创建临时文件目录,基本校验,取属性值,处理乱码,基类
这里在上传文件是execl并且需要读取的话,需要把fileitem对象转换成file,处理方式是创建临时目录,用流写入到一个临时
目录中
  1. package com.dadi.oa.web.action;
  2. import java.io.File;
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Map;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import org.apache.commons.fileupload.FileItem;
  10. import org.apache.commons.fileupload.FileUpload;
  11. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  12. import org.apache.commons.fileupload.servlet.ServletRequestContext;
  13. import org.apache.commons.io.FilenameUtils;
  14. import org.apache.commons.logging.Log;
  15. import org.apache.commons.logging.LogFactory;
  16. import org.apache.struts.action.ActionForm;
  17. import org.apache.struts.action.ActionForward;
  18. import org.apache.struts.action.ActionMapping;
  19. import org.springframework.web.context.WebApplicationContext;
  20. import org.springframework.web.context.support.WebApplicationContextUtils;
  21. import com.dadi.oa.pojo.Users;
  22. import com.dadi.oa.service.ReadExeclDataService;
  23. import com.dadi.oa.system.ConstantsUtil;
  24. import com.dadi.oa.util.RequestUtil;
  25. import com.dadi.oa.util.StringUtil;
  26. import com.dadi.oa.util.UploadUtil;
  27. /**
  28. * 读取execl action基类,处理一些通用操作
  29. * @author ao.ouyang
  30. *
  31. */
  32. public class OABaseReadExeclDataAction extends OABaseAction {
  33. private Log logger = LogFactory.getLog(this.getClass());
  34. protected ReadExeclDataService readExeclDataService;
  35. //默认读取execl的临时目录
  36. protected String tempReadExeclDir;
  37. //封装了form表单属性的集合
  38. protected Map<String,String> formFieldItems;
  39. protected File readExeclFile;
  40. private File tempDirectoryFile;
  41. public void setReadExeclDataService(ReadExeclDataService readExeclDataService) {
  42. this.readExeclDataService = readExeclDataService;
  43. }
  44. public void setTempReadExeclDir(String tempReadExeclDir) {
  45. this.tempReadExeclDir = tempReadExeclDir;
  46. }
  47. /**
  48. * 初始化临时文件目录
  49. */
  50. public void initDir(){
  51. formFieldItems = new HashMap<String, String>();
  52. String nativeWebAppFoldPath =((WebApplicationContext)ConstantsUtil.beanFactory).getServletContext().getRealPath("/");
  53. tempDirectoryFile = new File(nativeWebAppFoldPath + tempReadExeclDir);
  54. // 文件夹不存在就自动创建
  55. if (!tempDirectoryFile.isDirectory()) {
  56. tempDirectoryFile.mkdirs();
  57. }
  58. }
  59. @Override
  60. protected ActionForward dispatchMethod(ActionMapping mapping,
  61. ActionForm form, HttpServletRequest request,
  62. HttpServletResponse response, String name) throws Exception {
  63. // TODO Auto-generated method stub
  64. String resultStr=processFileUpload(request);
  65. if(!resultStr.equalsIgnoreCase("success")){
  66. request.setAttribute("info",resultStr);
  67. request.setAttribute("closepage", "yes");
  68. return mapping.findForward("oapromptinfo");
  69. }
  70. return super.dispatchMethod(mapping, form, request, response, name);
  71. }
  72. /**
  73. * 处理请求文件
  74. * @param request
  75. * @return
  76. */
  77. public String processFileUpload(HttpServletRequest request) throws Exception {
  78. String resultStr = "success";
  79. try {
  80. if(!FileUpload.isMultipartContent(new ServletRequestContext(request))){
  81. throw new Exception("操作异常,请重新再试!!!");
  82. }
  83. ServletFileUpload fileUpload = UploadUtil.getFileUploadObject(10);
  84. List fileItems = null;
  85. FileItem readItem = null;
  86. fileItems = fileUpload.parseRequest(request);
  87. for (Iterator it = fileItems.iterator(); it.hasNext();) {
  88. FileItem item = (FileItem) it.next();
  89. if (!item.isFormField()) {
  90. readItem = item;
  91. }else{
  92. formFieldItems.put(item.getFieldName(),item.getString("UTF-8"));
  93. }
  94. }
  95. //校验文件
  96. checkExecl(readItem);
  97. try {
  98. readExeclFile = new File(tempDirectoryFile.getAbsolutePath(), readItem.getName().substring(readItem.getName().lastIndexOf("\\")+1));
  99. readItem.write(readExeclFile);
  100. readItem.delete();
  101. } catch (Exception e) {
  102. e.printStackTrace();
  103. throw new Exception("文件转换异常,请检查!!!");
  104. }
  105. } catch (Exception e) {
  106. e.printStackTrace();
  107. resultStr=e.getMessage();
  108. logger.info("================ERROR:OABaseReadExeclDataAction.executeSub()"+e.getMessage());
  109. }
  110. return resultStr;
  111. }
  112. /**
  113. * 校验文件
  114. * @throws Exception
  115. */
  116. private void checkExecl(FileItem readItem) throws Exception{
  117. logger.info("==========OABaseReadExeclDataAction.checkExecl() begin===========");
  118. String inputFileName = readItem.getName();
  119. long inputFileSize = readItem.getSize();
  120. if(StringUtil.isEmptyString(inputFileName)){
  121. throw new Exception("系统找不到文件,请确定文件路径!!!");
  122. }
  123. if(!(inputFileSize > 0)){
  124. throw new Exception("系统找不到文件或文件没有内容!!!");
  125. }
  126. String inputFileExtension = FilenameUtils.getExtension(inputFileName).toLowerCase();
  127. if("".equalsIgnoreCase(inputFileExtension)){
  128. throw new Exception("文件无后缀名,请选择正确的文件上传!!!");
  129. }
  130. if("xls,xlsx".indexOf(inputFileExtension)<0){
  131. throw new Exception("请上传execl文档格式,格式如:xls,xlxs;请选择正确的文件上传!!!");
  132. }
  133. logger.info("===========OABaseReadExeclDataAction.checkExecl() end===========");
  134. }
  135. }

fileupload 上传execl文件的一些操作的更多相关文章

  1. asp.net fileupload上传大文件时提示404.13错误

    IIS 7 默认文件上传大小时30M 要突破这个限制,需要做如下操作: 1. 修改IIS的applicationhost.config     打开 %windir%\system32\inetsrv ...

  2. 解决FileUpload上传大文件报错

    <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedConte ...

  3. 解决Cornerstone不能上传.a文件的问题 Cornerstone不上传*.xcuserstate,*.xcbkptlist文件

    在使用CornerStone的时候经常会出现.a文件无法上传的问题,导致从svn checkout到本地的时候编译报错 这里可以通过配置CornerStone来达到上传.a文件的效果 操作步骤: 打开 ...

  4. centos/redhat命令行上传下载文件

    前言:客户端上没有安装xftp,winscp等等软件,无法将服务器上需要的文件下载到本地去解析,无法将本地的安装包上传到服务器上去,这个时候命令行就可以带你翱翔一波 配置如下: 服务器上: 1.安装需 ...

  5. FileUpload 上传文件,并实现c#使用Renci.SshNet.dll实现SFTP文件传输

    fileupload上传文件和jquery的uplodify控件使用方法类似,对服务器控件不是很熟悉,记录一下. 主要是记录新接触的sftp文件上传.服务器环境下使用freesshd搭建好环境后,wi ...

  6. Webform之FileUpload(上传按钮控件)简单介绍及下载、上传文件时图片预览

    1.FileUpload上传控件:(原文:http://www.cnblogs.com/hide0511/archive/2006/09/24/513201.html) FileUpload 控件显示 ...

  7. PHP文件上传和文件操作案例

    <?php /* *文件配置变量$dirname是目录名称 */ session_start(); $dirname = 'upload'; $fileClass = new fileClass ...

  8. .NET FileUpLoad上传文件

    一.上传扫描件到服务器,自定义创建文件夹(如果存在该文件夹,则无需创建),并判断格式以及文件大小进行保存: 首先创建一个保存按钮事件: protected void btnSave_Click(obj ...

  9. SFTP上传下载文件、文件夹常用操作

    SFTP上传下载文件.文件夹常用操作 1.查看上传下载目录lpwd 2.改变上传和下载的目录(例如D盘):lcd  d:/ 3.查看当前路径pwd 4.下载文件(例如我要将服务器上tomcat的日志文 ...

随机推荐

  1. oracle tnsnames.ora文件用法说明

      oracle tnsnames.ora文件用法说明 CreationTime--2018年8月10日08点32分 Author:Marydon 1.用途 oracle客户端所需要的一个文件,通过该 ...

  2. ActiveMQ基本介绍

    1.ActiveMQ服务器工作模型       通过ActiveMQ消息服务交换消息.消息生产者将消息发送至消息服务,消息消费者则从消息服务接收这些消息.这些消息传送操作是使用一组实现 ActiveM ...

  3. Jsp和session、request.getSession()

    request.getSession(false); 这段代码代表,如果没有和当前request关联的session则不创建session并且返回空 request.getSession(true); ...

  4. vsftp客户连接常见故障现象

    ftp客户连接常见故障现象现象0:> ftp: connect :连接被拒绝原因: 服务没启动解决: # chkconfig vsftpd on<Enter> 现象1:500 OOP ...

  5. 学习hibernate笔记

    曾经学习java的时候,一開始就学习了hibernate,那时候总认为ssh很高大上,所以就急忙看了下相关视频.只是由于实际须要不高,所以后来一直没有使用上hibernate组件.如今一年过去了,也疯 ...

  6. [转载]meclipse中project facet问题

    原文地址:meclipse中project facet问题作者:丫头_樱桃 一般出现在从别处import的项目上,只有项目文件夹上有红叉,其他地方都正常,现总结个人的几个解决方案: 有几种可能: 1, ...

  7. mybatis报错 Specified class is an interface

    本文转自:http://blog.csdn.net/u014331288/article/details/53869303 1.错误原因 Caused by: org.springframework. ...

  8. JS定义类及对象

    1.工厂方式 <script type="text/javascript"> function createObject(name){ var p = new Obje ...

  9. python学习笔记——线程threading (二)重写run()方法和守护进程daemon()

    1 run()方法 1.1 单个线程 在threading.Thread()类中有run()方法. from time import ctime,sleep import threading # 定义 ...

  10. RHEL7 - LINUX中的UID

    在RHEL7中: ·UID 0 分配给超级用户 ·UID 1-200是一系列“系统用户”,静态分配给红帽的系统进程 ·UID 201-999是一系列“系统用户”,供文件系统中没有自己的文件的系统进程使 ...