您的位置:首页 > 编程语言 > C语言/C++

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传递。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: