在文件的上传以及下载中有着一个fileUpload拦截器,这一次的内容大体上就是针对该拦截器在开发中如何实现文件上传下载功能做一个简单说明。在正式说明之前,还需要各位在web项目中导入支持文件上传下载和IO输出输入的两个jar包。他们的名字为commons-fileupload-1.2.1.jar 和 commons-io-1.4.jar ,这两个包都可以在apache网站上下载。
首先,在上传文件表单中属性值或许值得一提:method,以及 enctype 这两个属性的属性值是非常值得注意的一个方面,其中,method="post" enctype="multipart/form-data" 这两个属性值是必须的,只有这样在Form中上传文件才会起作用。
然后在定义文件上传的过程中我们需要定义 上传文件集合、上传文件名集合以及上传文件内容类型集合,当然,这是有多个文件一起进行上传的过程中我们所需要定义成List或者是数组的形式,至于单个只需要将其设置成字符串即可。
还有一个方面,文件上传之后他们会被存放在哪里呢?
这里我们必须在定义一个文件夹,并且在webroot这个目录下也定义一个这个文件夹才能进行成功的上传。
定义文件名以及文件内容变量名称时,要记住它是一个固定的变量名称:fileFileName 以及 fileContentType 这两个就是固定的变量名了。如果你将这个变量名进行变化就会发现这两个变量值都会变成NUll。
在进行上传的过程中,主要就是进行输入输出流到文件流之间的变化进行。
我们在文件进行上传的时候还可以进行设置制定文件的上传格式,让它只上传特定类型的文件。这里笔者提供一个例子:
设置制定类型为 txt xml
这样在设置的时候,我们就需要在struts.xml 文件中添加一个拦截器了,
<interceptor-ref name="fileUpload">
<param name="allowdTypes">text/plain,application/xml</param>
</interceptor-ref>
当然,在使用这个的时候,如果需要进行使用默认的拦截器,那么就一定需要对拦截器的书写顺序进行注意,这个一定要写在默认拦截器的前面。
因为struts2中如果某个拦截器执行拦截时发现自己已经执行过,第二个乃至之后同名的拦截器都不会进行执行。
而默认拦截器是会上传所有的文件类型,而我们进行重写就会发现不同的文件类型。
下载中要注意的就是在struts.xml中,必须要对下载文件类型进行定义,下载文件处理方法进行定义,下载文件输出流定义。
在文件处理方法中,要注意contentDisposition 是制定下载文件处理方式,但是如果其定义的值把前面的"attachment"去掉,则下载方式不是以附件的形式进行下载,而是以下载链接的形式进行下载。如果单机该链接,则会把下载文件的内容显示在浏览器中。