Struts2学习笔记⑧

今天是Struts2学习笔记的最后一篇文章了。用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下。

文件上传与下载、FreeMarker以及昨天没做完的例子

文件上传与下载

文件的上传与下载涉及到Java的IO操作,etc啊……女朋友打电话写不下去了,明天补!

2017年3月11日

经过了...重庆三日游、办公室三日游、辞职之后。。。终于有时间补上了!!!

最近一周可以说是上大学以来最爽的时候了,辞去了两年半的职务,主要还是因为那个狗屁老师啥都不懂,还想给你干活,下辈子吧!我也鄙视在他身边游走的人,一群狗腿子,就知道阿谀奉承,不敢怒不敢言,有啥意思?你们以后要走仕途是咋?我觉得,人绝对不能获得太憋屈,做人更不能让别人太憋屈!

这几天给自己定义一个技能学习路线:

 Struts2-->Spring -->SpringMVC -->Hibernate -->MyBatis

当然了,绩效考核管理系统这学期还要做,我主要还是学习新技术,我觉得老师对我很好了,没什么开发的压力,还能学到新技术  最近还要学习 Activiti和Redis,技术发展的让自己觉得一无是处,还是要用知识改变啊!

好了,重回到这个文章上面来:

文件的操作,也就是IO流,一直没有太仔细的研究,其实挺简单,就是太麻烦,

文件转换成流 然后在套上传输管道  那边接收  在把流转换成源文件 就这个过程。

自己也下载了JavaEE关于文件流的视频,还是要找个时间专题攻一攻这块儿。

Struts2的文件上传可是简单地很:首先这个表单的enctype="multipart/form-data"是肯定的,然后Action里面的代码有个大坑...主要是书没讲清楚,就是你的想知道你上传的文件的时候除了需要知道文件是啥,肯定还要知道文件名、文件大小、文件的类型等等,这些的话直接在你指定的表单的文件域的name后面加上什么ContentType之类的,不能使用其他的,只能是name+ContentType类型的,eg:

private File uploadFile;
private String uploadFileContentType;
private String uploadFileFileName;

 文件上传的处理代码如下:

        //创建输入流
        InputStream is = new FileInputStream(uploadFile);
        //拿到文件保存的本机位置
        String uploadPath = ServletActionContext.getServletContext().getRealPath("/upload");
        //根据给定的路径和指定的文件名创建一个文件实例,但这个实例的空的
        File toFile = new File(uploadPath,this.getUploadFileFileName());
        //为这个空文件套上输出的管子,开始输出文件内容
        OutputStream os = new FileOutputStream(toFile);
        //设置缓冲流
        byte[] buffer = new byte[1024];
        int length = 0;
        //其实这个循环判断就是保证将buffer里面的东西都输出出来
        while((length = is.read(buffer))>0)
        {
            os.write(buffer,0,length);
        }
        is.close();
        os.close();

其实多文件上传也很简单,不同的是前台传来的是一个数组,需要在业务逻辑中循环数组

for(int i = 0;i<getMultiFile().length;i++)
        {
            //创建输入流
            InputStream is = new FileInputStream(multiFile[i]);
            //拿到文件保存的本机位置
            String uploadPath = ServletActionContext.getServletContext().getRealPath("/upload");
            //根据给定的路径和指定的文件名创建一个文件实例,但这个实例的空的
            File toFile = new File(uploadPath,multiFileFileName[i]);
            //为这个空文件套上输出的管子,开始输出文件内容
            OutputStream os = new FileOutputStream(toFile);
            //设置缓冲流
            byte[] buffer = new byte[1024];
            int length = 0;
            //其实这个循环判断就是保证将buffer里面的东西都输出出来
            while((length = is.read(buffer))>0)
            {
                os.write(buffer,0,length);
            }
            is.close();
            os.close();
        }

还可以通过拦截器来限制上传文件的类型及大小:

<interceptor-ref name=""fileUpload>
    <param name="allowedType">
           image/bmp,image/png
    </param>
    <param name="maximumSize">
             81920     <!-- 单位是字节 -->
    </param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>

在Struts中实现文件的下载也非常简单,主要是需要配置action中result的返回类型,注意返回类型需要设置为流:stream

<!--File 下载演示-->
        <action name="download_*" class="tech.youngs.Action.DownloadFileAction" method="{1}">
            <result name="input">/WEB-INF/jsp/downloadFile.jsp</result>
            <result name="success" type="stream">
                <param name="contentType">image/jpeg</param>
                <!-- 这里的contentDisposition是指定文件下载的方式
                    attachment是弹出提示框进行下载的方式 
                    还有是inline是直接打开文件
                    Struts2默认inline -->
                <param name="contentDisposition">
                    attachment;filename="l_hires.jpg";
                </param>
                <!-- 这里定义了文件下载的输入流  并命名为downloadFile -->
                <param name="inputName">downloadFile</param>
            </result>
        </action>

获取下载文件的流可比上传文件的流要简单的多:

public InputStream getDownloadFile()
    {
        return ServletActionContext.getServletContext()
                .getResourceAsStream("/upload/l_hires.jpg");
    }

非常简单不是。

好了 文件的上传下载的坑算是填完了,接下来需要注意得是有一个知识点非常重要但是我忽略了,那就是FreeMarker,这个就是个模板引擎,因为绩效考核管理系统使用的是json传数据,所以没有用到FreeMarker,但其实它非常好用也很重要,现在慕课网还更新着他的知识。用好FreeMarker彻底让前后端分离,代码清晰。

我现在看到的FreeMarker用得最多的地方还是显示后台传值。

具体的FreeMarker怎么用,额,等到项目实战了在继续补充。

还有一个Demo,也做完了,没啥可说的,大部分在项目中遇见过 主要还是属性驱动和模型驱动这块儿,千万要知道模型驱动要new出来的!

好了!Struts2要有什么新的知识会及时更新,笔记就告一段落了!

下一站,Spring!

posted @ 2017-03-01 22:30  Youngs的学习之路  阅读(134)  评论(0编辑  收藏  举报