前言:
如今姐妹们对“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 上传文件