上传

• 供应给用户一个上传的 jsp 界面:

<form action=\公众upload.do\"大众 method=\"大众post\"大众 enctype=\"大众multipart/form-data\"大众> <input type=\"大众file\"大众 name=\公众myfile\"大众></form>

○ 页面表单必须要用 post 要求

jsp怎么传值给action类你所不知道的struts上传功效 Ruby

○ 要在表单中添加一个 enctype 属性,属性值为 multipart/form-data,标记着相应的后台处理

○ 在表单中添加一个上传文件的输入域,类型为file 类型

• 不同的框架对文件会进行不同的封装

• 上传文件以字节流的办法传送

• 根据表单界面设计表单Bean:

○ 必须有一个对应上传输入域的属性:类型为 FormFile private FormFile myfile;

§ FormFile -- 是一个接口,接口中有相应的方法可以获取到上传的数据 / 流工具

上传实例

• 用户发出要求上传一个文件,Tomcat 创建 request 工具封装用户要求:

○ 参数名是 myfile,参数值是封装了用户上传文件的字节数组工具[ 字节流 ]

• Tomcat 将 upload.do 要求交给 struts,struts 创建表单Bean 工具并自动网络表单数据:

○ 网络数据时,一旦创造 enctype 属性中的上传要求 [ enctype=\公众multipart/form-data\公众]:

§ Tomcat 创建出一个实现 FormFile 接口类的工具,封装 request 中参数名为 myfile 的字节流工具,即这个工具中封装了用户上传的文件

§ struts 将封装了用户上传文件的工具的地址赋值给表单Bean 中的 myfile 属性

○ 此时用户上传的文件已经上传到了做事器中-- 存放在表单Bean 里

○ 由于表单Bean 已经被 struts 设置在了 request 内置工具中,故文件在request 中 -- 如

果做事端不及时下载,要求结束时request 被销毁,文件也不存在了

• 创建 Action 并调用 execute() 方法:做事器从表单Bean 中下载用户上传的文件

○ 造型取得 ActionForm

UploadActionForm uaf = (UploadActionForm)form;

○ 取得实现了 FormFile 接口类且封装了用户上传文件的工具,即取得表单Bean 中的

myfile 属性FormFile myFile = uaf.getMyfile();

○ 下载文件:

§ 创建文件字节输出流,输出流指向 D 盘下的和上传文件相同文件名的文件 -- 将数据以原文件名存在D 盘下FileOutputStream fos = new FileOutPutStream(\"大众d:\\\"大众+myFile.getFileName());

□ 通过 FormFile 接口中的 getFileName() 方法,可以取得上传文件的文件名

§ 将字节数组工具的数据写到文件输出流所指的文件中fos.write(myFile.getFileData());

□ 通过 FormFile 的 getFileData() 方法,可以取得一个封装了被上传文件的文件字节流的

字节数组工具

§ 强行清空缓存,将文件写到外存,然后关闭输出流fos.flush(); fos.close();

□ 字节输出流有输出缓存,输出时先写到输出缓存,缓存满了才写到外存中

• 返回 ActionForward 工具,struts 解析后在 jsp 页面显示哪个文件上传成功:

${ uploadForm.myfile.fileName}

○ 通过属性名 uploadForm,找到了封装了上传文件的表单Bean ActionForm

○ 通过.myfile,找到了表单Bean中的 myfile 属性 -- 该属性中是实现了 FormFile接口类的

工具

○ 通过工具地址调用 getFileName() 方法,得到上传文件的文件名

分区 框架 的第 1 页