版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章:Struts2文件上传下载
主讲:刘雷本章内容Struts2单文件上传Struts2多文件上传Struts2文件下载表单enctype属性application/x-www-form-urlencoded:默认值,只要是能输出网页的服务器端环境都可以multipart/form-data:上传二进制数据,只有使用multipart/form-data,才能完整的传递文件数据,进行上传操作两个上传框架Common-FileUplaod:apache的开源项目,由jakarta项目组开发。功能强大,简单易用,可以实现一次上传一个或多个文件,并可限制文件大小。COS:O‘Reilly公司开发的开源框架会不定期的增加一些新功能。下载Common-FileUplaod框架下载Common-FileUplaod框架地址:
下载commons-fileupload-1.2-bin.zip文件解压后得到commons-fileupload-1.2.jar
下载commons-io-1.3.2-bin.zip文件解压后得到commons-io-1.3.2.jar基于表单的文件上传注意:上面是基于表单的上传,在form标签中有一个必须的属性值设置:enctype.如果要做文件上传功能必须将enctype值设为multipart/form-data.此外,文件上传还需要二个JAR文件支持:文件上传页面upload.jsp
<formaction="upload.action"method="post"enctype="multipart/form-data">文件:<inputtype="file"name="myFile"><inputtype="submit"value="提交"></form>或者<%@tagliburi="/struts-tags"prefix="s"%><s:actionerror/><s:formaction="upload"method="post"enctype="multipart/form-data"> <s:filename="file"label="选择上传的文件"/> <s:submitvalue="上传"/></s:form>上传Action类UploadAction上传Action类UploadActionStruts.xml处理错误提示以中文显示如果上传文件大于2M时,在页面上就出现了一堆英文的错误信息,大致是:therequestwasrejectedbecauseitssize....exceedstheconfiguredmaximum...并且在fieUpload中将来自MultiPartRequestWrapper型request对象的错误信息给加到了Action的错误中。
这时候,你在ApplicationRperties中自定义的上传文件过大的错误信息根本不起作用。原因就如书上所言,在底层commons-fileupload组件中就把异常给抛出来了文件根本没被上传,所以到了fileUpload拦截器时,根据取不到文件,当然也就没法对文件的类型和大小进行判断了。
注意解决页面therequestwasrejectedbecauseitssize错误提示使用数组同时上传多个文件使用数组同时上传多个文件使用数组同时上传多个文件使用数组同时上传多个文件使用数组同时上传多个文件使用list同时上传多个文件使用list同时上传多个文件使用list同时上传多个文件使用list同时上传多个文件使用list同时上传多个文件文件下载有的同学可能会想,我只要设置一个超链接,不就可以下载文件了吗?确实如此,但是通过超链接下载文件,暴露了下载文件的真实地址,不利于对资源进行安全保护;而且利用超链接下载文件,服务器端的文件只能存放在Web应用程序所在的目录下。利用程序编码实现下载,可以增加安全访问控制,对经过授权认证的用户提供下载,还可以任意提供下载的数据,我们可以将文件放到Web应用程序以外的目录中,也可以将文件保存到数据库中。利用程序下载也非常简单,只需要按照如下的方式设置三个报头域就可以了:Content-Type:application/x-msdownloadContent-Disposition:attachment;filename=downloadfileContent-Length:filesize浏览器在接收到上述的报头信息后,就会弹出文件下载对话框,让你将文件保存到本地硬盘。Struts2对文件下载的支持Struts2通过org.apache.struts2.dispatcher.StreamResult结果类型来支持文件下载,使得原本编写就简单的下载程序变得更加简单了。StreamResult结果类型利用HttpServletResponse对象返回的ServletOutputStream对象向客户端输出下载文件的二进制数据,它有下列参数:contentType:发送给Web浏览器的数据流的MIME类型(默认是text/plain),即下载文件内容类型contentLength:数据流的长度,以字节为单位(浏览器显示一个进度栏),即下载文件的长度。contentDisposition:用于控制文件下载的一些信息,可选择的设置包括:inline;filename=“下载文件名”和attachment;filename=“下载文件名”,filename指定下载的文件名。Inline表示下载文件在本页面内部打开,attachement表示弹出”文件下载”对话框。不过,这也不是绝对的,对于浏览器能够显示的下载文件是这样的,对于浏览器不支持的下载类型,即使使用inline选项,仍然会弹出”文件下载”对话框。contentDisposition的默认值是inline.inputName:Action中用来下载文件的属性的名字,该属性的类型是InputStream.默认值是inputStream.bufferSize:文件数据从输入复制到输出的缓冲区的大小,默认为1024字节。举例streamResult结果类型已经在struts-default文件中定义,逻辑名为stream.我们看一个使用stream结果类型的例子:在struts2中实现文件下载配置struts.xml页面download.jsp工程层次图注意如果你要下载任意目录下的文件(而不仅限于Web应用程序目录),那么只需要修改action中返回文件输入流的方式即可,例如:returnnewFileInputStream(inputPath).在实际应用中,下载的文件不应该在struts.xml中配置,如果是这样,那就等于将DownLaodAction的功能限制为了只下载一个文件。下载文件的选取应该通过编码来实现,根据浏览器传来的下载请求,查询配置文件或数据库,获取真实下载文件数据,构造InputStream对象。改进文件下载程序对于下载的文件名、下载的文件类型都是在struts.xml文件中配置的,如果有许多不同类型的文件要提供给用户下载,那么这种方式显然有失灵活性。为了能动态设置文件类型和下载的文件名,我们可以编写一个拦截器,在Action执行完毕,result执行之前,动态添加StreamResult的参数。为了能够在result执行之前截获调用,我们需要用到PreResultListener,该接口可以通过ActionInvocation注册,在Action执行完毕,result执行之前得到一个回调。PreResultListener需要在拦截器中进行注册,所以我们需要编写一个拦截器,然后在拦截器方法中注册一个PreResultListener实例。编写DownLoadInterceptor拦截器类新建DownLoadInterceptor类,继承AbstractInterceptor类,代码如下:说明在上面的代码中,我们定义了一个匿名的内部类实现PreResultListener接口,然后调用ActionInvocation的addPreResultListener方法注册PreResultListener实例。在匿名内部类的beforeResult()方法中,不能通过invocation.getRes
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026二上数学表内除法公开课课件
- 2026北师大二下十年变化情境课件
- 人教版小学四年级上册语文 2 繁星 教案
- 2026四下数学全册教学课件
- Unit 5 Off to space Section 4 Extending and developing competencies Focusing on culture 教学设计2026-2027学年沪教版英语七年级上册
- 2026四下数学运算律教学课件
- 《体外诊断驻点工程师》习题及答案 任务3 岗位认知
- 离线气隙与AI冷数据驱动LTO磁带库进入高密度智能归档新阶段
- 安徽省阜阳市十校联考2027届九年级化学第一学期期末调研模拟试题含解析
- 2027届上海市闵行区九年级物理第一学期期末考试试题含解析
- 2026年山东将军开元纸业有限公司招聘(13人)笔试模拟试题及答案详解
- 国有企业董事会决策事项清单管理制度
- 2026年安徽(高考)化学考试试卷真题(含答案)
- 2026-2030中国航空光电吊舱行业研发创新策略及投资价值评估报告
- 2026年河南省中考真题语文试卷和答案
- 2026云南中医药大学招聘第二批科研助理岗位工作人员(事业编制外)25人笔试参考题库及答案详解
- 体育与健康九年级人教版背越式跳高教案
- 2026保密教育线上培训考试试题(附完整答案及解析)
- 安徽宣城市绩溪皖能抽水蓄能发电有限公司招聘笔试题库2026
- 2026四川成都交通投资集团有限公司第一批次校园招聘15人笔试历年常考点试题专练附带答案详解
- 江西省2026年重点学校初一新生入学分班考试试题及答案
评论
0/150
提交评论