c++ primer第五版 练习7.23
2014-11-09 23:07
411 查看
文件上传
基本原理上传文件是由FileUploadInterceptor实现的,基本原理是这样的,FileUploadInterceptor会从上传的数据中解析出 上传的文件名称,文件类型和文件内容,调用Action相应的方法进行设置。
假定上传表单中File控件的名称是upload,则Action必须实现如下三个设值方法:
setUploadFile……保存上传的文件内容
setUploadFileName……保存上传的文件名称
setUploadContentType……保存上传的文件类型
拦截器支持针对上传表单同一名称的文件控件有多个的情况,也就是同时上传多个文件,此时要求上述方法的参数是一个列表或者数组,下面描述同时上传多个文件的实现步骤:
构建上传表单
下面的示例代码中,名称为upload的File控件有多个,表示要同时上传多个文件。
<s:form></s:form>"upload" action="customer/upload.action" method="POST"
enctype="multipart/form-data">
<s:file></s:file>"File (1)" name="upload" />
<s:file></s:file>"File (2)" name="upload" />
<s:file></s:file>"FIle (3)" name="upload" />
<s:submit> </s:submit>
实现Action
这里重点列举必须实现的三个设值方法,我们可以注意到,方法名称是单数形式,但是参数是一个列表。
java 代码
public void setUploadContentType( List<string> uploadContentTypes) </string>
{
this.uploadContentType = uploadContentTypes;
}
public void setUploadFileName( List<string> uploadFileNames) </string>
{
this.uploadFileName = uploadFileNames;
}
public void setUpload( List<file> uploads) </file>
{
this.upload = uploads;
}
配置拦截器
具体的配置不再赘述,需要提一下的是此拦截器支持allowTypes和maximumSize属性,支持限制文件类型及文件大小。
另外在捕获错误时,会设置几个字段错误,字段错误的消息可以在资源文件中配置,支持的三种错误类型的键值如下:
struts.messages.error.uploading……当文件不能被上传时的错误信息。
struts.messages.error.file.too.large……文件大小超限时的错误信息。
struts.messages.error.content.type.not.allowed……文件类型不允许时的错误信息。
全局配置
可以在struts.properties文件中设置上传文件保存的临时目录,最大大小等。
下载
下载是通过StreamResult类来实现,这是一个自定义结果类型,主要作用是直接向HttpServletResponse对象发送原始数据。 StreamResult假定Action会提供一个输入流的访问方法,并将这个输入流输出到响应对象中。SteamResult还提供如下配置属性。
contentType……发送数据的MIME类型,比如text/plain
contentLength……内容长度,单位为字节,浏览器会基于此值显示进度条
contentDispostion……设置响应头Content-disposition的值,缺省为inline
bufferSize……从输入流中读取到输出流的缓存大小
inputName……action中提供输入流的属性名称,缺省为inputStream
下面是一个StreamResult的配置示例:
xml 代码
<action name="download2" class="org.apache.struts2.showcase.filedownload.FileDownloadAction">
<param name="inputPath">\images\struts-gif.zip</param>
<result name="success" type="stream">
<param name="contentType">application/zip</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">filename="struts-gif.zip"</param>
<param name="bufferSize">4096</param>
</result>
</action>
注意:Result对象中可以通过OGNL语法访问值堆栈,这意味着可以通过Action或其他方式传递值来设置Result配置参数,比如上述配置中contentDisposition通常是动态的,这可以通过action传递。
相关文章推荐
- C++ Primer(第五版)练习7.23 7.27 7.32
- C++ primer(第五版) 练习 4.22 个人code
- C++ primer(第五版) 练习 6.21 个人 code
- C++ primer(第五版) 练习 7.9 个人 code
- 《C++ Primer 第五版》练习9.51参考答案
- C++ Primer(第五版) 6.7节练习
- C++ primer 第五版 中文版 练习 10.6 个人code
- C++ primer 第五版 中文版 练习 10.33
- C++ primer 第五版 中文版 练习 10.31 个人code
- C++ primer 第五版 中文版 练习 12.7 个人code
- C++ primer 第五版 中文版 练习 12.23 个人code
- C++ Primer 第五版 中文版 练习 13.13 个人code
- C++ Primer 第五版 中文版 练习 13.35 个人code
- C++ Primer(第五版)练习3.32
- C++ Primer 第五版 练习 3.20
- C++ Primer(第五版)练习6.26
- C++ Primer(第五版)练习3.32
- C++ primer(第五版) 练习 4.31 个人code 和 疑惑
- C++ primer(第五版) 练习 5.21个人code
- C++ primer 第五版 中文版 练习 10.9 个人code