龙空技术网

利用struts1实现excel文件上传功能关键三步

影视大搜捕 78

前言:

如今姐妹们对“struts 上传文件”大体比较讲究,看官们都需要知道一些“struts 上传文件”的相关知识。那么小编在网上搜集了一些有关“struts 上传文件””的相关内容,希望咱们能喜欢,看官们一起来学习一下吧!

由于我们维护的项目比较老,用的还是struts1+jsp+hibernate的技术架构,所以有些功能开发时遇到问题连资料都找不到。今天结合我自身的开发经历分享下利用struts1实现excel文件上传功能的经验。

1、要采用form表单提交的方式上传excel文件,需要设置enctype的属性为enctype="multipart/form-data"。

<html:form method="post" action="/account/user" enctype="multipart/form-data">

<div class="form-group" style="margin-top: 10px">

<label class="col-sm-2 control-label">选择文件<font style="color: red">*</font>:</label>

<div class="col-sm-10">

<input id="uploadFile" name="uploadFile" type="file" class="file-loading" >

</div>

</div>

</html:form>

说明:enctype就是encodetype就是编码类型的意思。multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data,才能完整的传递文件数据。application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件,multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传。

input标签的type="file"需要是文件类型才可以,其中name="uploadFile"要和实体类中的属性一致才行。

至于上传文件弹框的样式可以自行设计美观的样式,我只说明了关键的地方。

2、在struts-config.xml配置文件中配置如下

<form-beans>

<form-bean name="userForm" type="com.jj.web.action.payment.UserForm" />

</form-beans>

<action

path="/user"

name="userForm"

scope="request"

validate="false"

type="com.jj.web.action.payment.UserAddAction" >

<forward name="readOnlyPage" path="/jsp/user_read.jsp" />

</action>

说明:在UserForm的实体类中需要增加struts1接受文件的实体类

private FormFile uploadFile;//文件导入实体类 这个非常重要是解析文件流的关键 要和页面 <input id="uploadFile" name="uploadFile" type="file" class="file-loading" >的属性名一致才可以

3、获取excel文件并用poi解析

FormFile uploadFile = ggclaimForm.getUploadFile();

InputStream inputStream = uploadFile.getInputStream();

Workbook workbook= new HSSFWorkbook(inputStream);

用poi解析数据的地方在这里就不再赘述

说明:

在Struts中,一个FormFile类型的对象对应Form表单中创送的一个文件,Struts将上传的文件信息封装金FormFile中,通过FormFile提供的方法可以方便的进行文件的操作。其实FormFile是一个接口,位于 org.apache.struts.upload.FormFile 中,它定义了操作上传文件的基本方法。

FormFile接口定义的常用方法:

(1) getFileName()/setFileName() //用于获取或设置文件名;

(2) getFileSize() / setFileSize() //用于获取或设置文件字节数;

(3) getFileData() //用于获取文件的字节数组,用于小的文件;

(4) getInputStream() //用于获取文件的输入流,用于较大的文件;

(5) destory() //销毁FromFile;

标签: #struts 上传文件