• 供应给用户一个上传的 jsp 界面:
<form action=\"大众upload.do\公众 method=\公众post\公众 enctype=\公众multipart/form-data\"大众> <input type=\公众file\"大众 name=\"大众myfile\公众></form>
○ 页面表单必须要用 post 要求
○ 要在表单中添加一个 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 页