strust框架实现文件上传

例子:上传一张庐山的照片

表单:

<form action=" upload.do"method="post" enctype="multipart/form-data"> //上传编码方式
标题: <input type="text" name="title"><br>
文件: <input type="file" name="myfile"><br>
<input type="submit" value="提交" >
</form>

流程:
用户通过表单发请求上传文件,Tomcat创建request封装请求
key = title; vaule = “lushan”
key = myfile; vaule = byte[]类型字节数组对象(在http协议体)
upload .do请求给struts
struts截取路径/upload, 找到该请求对应的配置信息

<action path="/upload"
type=" com. bjsxt . struts .UploadTestAction"
name= "uploadForm"
scope= "request"
<forward name=" success"path="/upload_ success jsp"/>
</action>
<form- bean name="uploadForm" type=" com. bjsxt . struts .UploadActionForm"/>

创建表单bean对象并自动收集表单数据
收集数据中,一旦有enctype= “multipart/ form-data”, Tomcat先创建出一 个实现FormFile接口(commons -fileupload 架包中)对
象,然后从request中通过参数名为myfile找到封装文件的byte[]类型字节数组对象,将封装文件的字节流封装到实现FormFile接口的对象。

收集数据:到bean中拿到跟参数名相同的属性,调用UploadActionForm 的setTitle(String title) \ setMyfile(FormFile myfile)方法将value的值设到bean下。
◆第一个bean:参数名title,参数值为"lushan"
◆第二个bean: 参数名myfile, 参数值为封装文件字节流实现FormFile接口的对象

存放文件的表单bean存在request中, (请求结束就销毁, 所以要将文件拿出来,放在服务器上)
调用 processActionCreate(request, response, mapping), 创建action对象
调用processActionPerform( request, response, action, form, mapping) ,执行对象的execute()方法,

执行uploadTestAction
1、造型获得ActionForm

UploadActionForm uaf=(UploadActionForm)form;

2、取得实现了FormFile接C ]类且封装了文件字节流的对象

FormFile myFile=uaf . getMyfile();			 //实现formfile接[封装文件的对象

3、拿到上传的文件名,通过文件名,创建文字字节输出流

Fileoutputstream fos=new Fileoutputstream("c:\\" myFile.getFileName);			//创建文件字节输出流

4、将字节数组对象的数据写到文件对象输出流所指的文件上

fos .write(myFile. getFileData());			//取得文件字节流对象

5、强行清空缓存,关闭流

fos . flush();
fos . close();

返回ActionForward 对象,struts 解析后在jsp 页面显示什么文件上传成功:

return mapping. f indForward("success"); .

upload_success.jsp 中

${ uploadForm. myfile .fileName}

◆通过属性名uploadForm, 找到了封装了上传文件的表单Bean ActionForm
◆通过.myfile, 找到了表单Bean中的myfile属性,该属性中是实现了FormFile接口类的对象的地址
◆通过调用getFileName()方法,得到上传文件的文件名

限定上传文件大小
默认250M

<controller maxFileSize="10M"/>//限定最大上传数据大小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值