struts2的文件的上传与下载笔记

文章是参考了一部分,只是打算记下来当个学习的笔记

文件上传早就想学了,一直拖到了现在。

----------------------------------------------------------------------------------------------------

上传准备工作:1.首先是struts2的common-fileupload.jar包的添加

                       2.jsp页面的form表单红色字体是新添加必须的<s:form action="upload" method="post"enctype="multipart/form-data">
                                                                                        <s:file name="file"></s:file>
                                                                                        <s:submit value="提交"/>
                                                                                         </s:form>

                       3.action中有个跟表单  <s:file name="file"></s:file>属性对应的File类

                                                                                                                         private Filefile;        //包含文件内容

                                                                                                                         private StringfileFileName;    //上传文件的名称;

                                                                                                                         private StringfileContentType;    //上传文件的MIME类型;

                                                                                                                         这些属性都会随着文件的上传自动赋值;

action里面

public String getLoad() throws IOException{
		//路径是写死的
                 //通过file得到他的路径是个临时无意义的路径
		File getFile=new File("E:\\"+fileFileName);
		FileInputStream fis=new FileInputStream(file);
		FileOutputStream fos=new FileOutputStream(getFile);
		int t=0;
		while((t=fis.read())>-1){
			fos.write(t);
		}
		fis.close();
		fos.flush();
		fos.close();
		return "success";
	}

4. 其他xml照旧这样一个简单的上传就完成了。

-----------------------------------------------------------------------------------------------

但是有一些问题例如 上传时的一些验证 文件类型、大小了?

1.可以手动验证 麻烦

2.就是利用拦截器去实现 

在引用fileUpload拦截器的时候,可以指定三个参数(指定<param>子元素):

  • allowedTypes:指定允许上传的文件的类型,如果存在多种类型,以逗号隔开。注意:这里添的不是文件的扩展名,而是对应的ContentType,如果不知道某种文件的ContentType可以先上传一下试试,在后台输出ContentType来。
  • maximumSize:指定允许上传的文件的最大字节数。
  • allowedExtensions:指定允许上传的文件的扩展名。

如果上传的文件不满足以上的参数指定的条件,则会跳转到一个叫input的<result>上,一般input都会指回到提交之前的页面,也就是文件上传页面。

在fileUpload拦截器后,需要添加<interceptor-ref name="defaultStack"/>

xml配置例子

  <action name="upload" class="com.stx.action.UploadAction" method="getLoad">
         <interceptor-ref name="fileUpload">
            <param name="allowedExtensions">jpg</param>
         </interceptor-ref>
          <interceptor-ref name="defaultStack"></interceptor-ref>
        <result name="success">upload.jsp</result> 
        <result name="input">upload.jsp</result>
         </action> 

单个文件上传最大值有默认的限制,如果手动修改可以覆盖掉的

另外就是错误信息的默认提示 在struts2配置的默认核心 信息文件中    可以通过配置文件覆盖掉

------------------------------------------------------------------------------------------------

多文件上传

只需要在提交页面上添加同名的多个文件输入域,然后在Action中对应使用File类型的数组去接收这些参数即可。

<%@taglib prefix="s" uri="/struts-tags" %>
<s:fielderror/>
<form action="/helloworld/uploadAction.action" method="post" 
	enctype="multipart/form-data">
	文件:<input type="file" name="myFile"><br>
	文件:<input type="file" name="myFile"><br>
	文件:<input type="file" name="myFile"><br>
	文件:<input type="file" name="myFile"><br>
    <input type="submit" value="提交">
</form>

action
            private File[] myFile;   

            private String[] myFileFileName;

------------------------------------------------------------------------------------------

文件下载 

             struts2的文件下载给的是个输出流 返回类型stream类型

action例子

public InputStream getInputStream() throws Exception{
		
		return new FileInputStream("E:\\死灵.txt");
	}

xml

<action name="download" class="com.stx.action.UploadAction">
        
        <result type="stream">
         <param name="contentDisposition">attachment;filename="死灵.txt"</param>
        </result>
        </action>    

其中contentDisposition 参数           例1.内嵌显示一个文件
                                            Content-disposition: inline; filename=foobar.pdf
                                          例2.往response里附加一个文件
                                            Content-disposition: attachment; filename=foobar.pdf

最后

页面用一个超链接就可以了

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值