JAVA使用字节流将本地图片传到前端

JAVA使用字节流将本地图片传到前端

01.基本介绍

在我们日常的开发中,会遇到对验证码的使用问题(验证码的作用这里不多多说,避免程序被恶意攻击等),如何是的前端和后端保持一致是一个问题,当然本程序不是介绍如何去写一个使用前端去显示一个验证码,并且验证码的值与后台的数据保持一致的问题,只是接一个使用java把本地图片写到前端html页面以提供一种思想去抛砖引玉。并且本博客是围绕一个使用java调用python获取中文分词的结果,以及与之对应的词云图片的系统进行展开的,在各个部分的技术要点讲解完了之后,博主将在最后将程序源码放到百度云上,供读者参考学习。

02.代码介绍

后台代码,这是一个servlet程序

public class WCServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String r = request.getParameter("r");
        //使用字节流读取本地图片
        ServletOutputStream out=null;
        BufferedInputStream buf=null;
        //创建一个文件对象,对应的文件就是python把词云图片生成后的路径以及对应的文件名
        File file = new File("E:\\Java\\eclipse_code\\NLP\\WebContent\\source\\wordcloud.png");
        try {
            //使用输入读取缓冲流读取一个文件输入流
            buf=new BufferedInputStream(new FileInputStream(file));
            //利用response获取一个字节流输出对象
            out=response.getOutputStream();
            //定义个数组,由于读取缓冲流中的内容
            byte[] buffer=new byte[1024];
            //while循环一直读取缓冲流中的内容到输出的对象中
            while(buf.read(buffer)!=-1) {
                out.write(buffer);
            }
            //写出到请求的地方
            out.flush();
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally {
            if(buf!=null) buf.close();
            if(out!=null) out.close();
        }
        //传输结束后,删除文件,可以不删除,在生成的图片中回对此进行覆盖
        File file1 = new File("E:\\Java\\eclipse_code\\NLP\\WebContent\\source\\wordcloud.png");
        file1.delete();
        System.out.println("文件删除!");
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

前端代码:

    <!-- 词云 -->
            <div class="row col-sm-12">
            <button type="button" class="btn btn-default" id="picbtn" >云图</button>
                <div align="center" id="dpic">
                    <img alt='文本分析的云图' src='' id='pic'>
                </div>
            </div>

这里使用一个JavaScript去控制的在https://blog.csdn.net/meiqi0538/article/details/79861704已有介绍

<script type="text/javascript">
        /* 在页面加载完成后使用*/
            $(function(){
            /*一个定时函数,获取时间的 */
                setInterval(showtime,1000);
                /* 函数处理,使用的是异步请求ajax技术*/
                $("#sbtn").click(function(){
                /* 创建一个layer load对象*/
                    var ii=layer.load();
                    /*ajax进行请求 */
                    $.ajax({
                    /*请求方式 */
                        type:'POST',
                        /*请求的地址 */
                        url:'${pageContext.request.getContextPath()}/nlp',
                        /* 请求的参数和内容*/
                        data:{text:$("#textareaCode").val()},
                        /* 数据格式为json*/
                        dataType:'json',
                        /* 请求成功后,返回结果result,写一个函数进行处理*/
                        success:function(result){
                            //清空之前的内容,避免数据都叠加在一起
                            $("#rview").empty();
                            /* 给指定区域写内容,也就是要显示的地方*/ 
                            $("#rview").prepend(result); 
                            /*为标签写属性,这里我使用的是java的数据流方式传递图片到页面,类似于验证码原理 */
                            $("#pic").attr("src","${pageContext.request.contextPath }/wc");
                            /* 处理结束后关闭遮罩层*/
                            layer.close(ii);
                        }
                    });

                });
            });
            function showtime(){
                var t=new Date();
                var weekday=new Array(7);
                weekday[0]="周日";
                weekday[1]="周一";
                weekday[2]="周二";
                weekday[3]="周三";
                weekday[4]="周四";
                weekday[5]="周五";
                weekday[6]="周六";
                document.getElementById("time").innerHTML="当前时间:"+t.getFullYear()+"年"+(t.getMonth()+1)+"月"+t.getDate()+"日"
                +weekday[t.getDay()]+" "+t.getHours()+":"+t.getMinutes()+":"+t.getSeconds();
            }
        </script>

03.结果展示

这是python对javaweb前端传递的参数(文字),分词结果,并产生的图片
这里写图片描述

猜你喜欢

转载自blog.csdn.net/meiqi0538/article/details/79862213
今日推荐