struts2中文件上传和下载

原理:

Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。

不多说:上码:

先新建一个jsp页面:一个form表单

<s:form action="upload" method="post" enctype="multipart/form-data">
    	<s:file name="file" label="请选择要上传的文件"></s:file>
    	<s:submit label="上传"></s:submit>
    </s:form>
注意:method:必须是post,还有上传的编码必须是:multipart/form-data

然后再建一个action类:

	private File file;//文件
	private String fileFileName;//文件名称.名字不能变
	private String fileContentType;//文件类型,名字不能变
注意:fileFileName:该文件名称不能变。fileContentType:文件类型的名称也不能变。这是因为struts2默认的对文件上传的注入。它在底层已经封装好了。我们可以直接用就行了。

最后当然是最重要的实现上传了。

	@Override
	public String execute() throws Exception {
		String path=ServletActionContext.getServletContext().getRealPath(savePath);//存放的路径
		String fileName=path+"\\"+user.getFileFileName();//文件名
		BufferedInputStream bis=null;//文件输入流
		BufferedOutputStream fis=null;//文件输出流
		try {
			//文件输入流
			bis=new BufferedInputStream(new FileInputStream(user.getFile()));
			//文件输出流
			fis=new BufferedOutputStream(new FileOutputStream(fileName));
			//新建一个数组存放文件数据
			byte[] bt=new byte[1024];
			int len=0;
			//读取文件,判读文件是否还有数据
			while((len=bis.read(bt))!=-1){
				//写到bt数组里,从0开始,到len写入数据,是因为数组大小可能会超过文件大小
				fis.write(bt,0,len);
			}
		} catch (Exception e) {
			e.printStackTrace();
			return ERROR;
		}finally{//关闭输入,输出流
			try {
				if(bis!=null)
					bis.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(fis!=null)
					fis.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return SUCCESS;
	}

还有struts.xml文件

<action name="upload" class="com.accp.Action.UploadAction">
			<param name="savePath">upload</param>
			<result name="success">/uploadSuc.jsp</result>
			<result name="input">/uploadFail.jsp</result>
			<interceptor-ref name="defaultStack">
				<!--配置单个文件最大字节  -->
				<param name="fileUpload.maximumSize">102400</param>
				<!-- 配置文件类型,注意文件类型不是.jpg.而是有一个类型名称。可以再tomact/conf/web.xml文件查找类型 -->
				<param name="fileUpload.allowedTypes">image/pjpeg</param>
			</interceptor-ref>
		</action>

下载:(实现一个简单的下载)

一个jsp页面:<a href="download.action">下载</a>

一个action类:

public class Download extends ActionSupport{
	public InputStream getDownloadFile(){
		//返回一个输出流实例
		return ServletActionContext.getServletContext().getResourceAsStream("/upload/123.jpg");	
	}
	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
}
struts.xml文件:

<action name="download" class="com.accp.Action.Download">
			<result name="success" type="stream">
				<!-- 下载类型 -->
				<param name="contentType">image/pjpeg</param>
				<!-- 文件名,是因为http协议的关系所以要file="" -->
				<param name="contentDisposition">filename="123.jpg"</param>
			<!-- 输入流 ,downloadFile是getDownloadFile() 获取过来的 方法名。默认规定-->
				<param name="inputName">downloadFile</param>
			</result>
		</action>
over.....


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值