卜若的代码笔记系列-Web系列-功能专栏-通过前端更新服务器图片并显示-3101

1.现在,我又有了新的需求。

具体要求是这样的。

需求一:
首先,我需要开发一整个界面,所有的图片都存放在自己的网络服务器,我们只要用<img src = ""/>标签来访问我的图片就行
然后,我想尽可能能的简化这个过程。

简单的来说,比如我拥有一个域名

xxx.com

然后,我就想通过
http://localhost:8080/test/getPic?key=login.jpg
这种方式获取图片。
然后我就直接堆页面就行。
是吧,我这需求没问题吧,这只是这个网络资源管理器里面请求资源的部分

需求二:我现在想要改变这张图片,我只想在前端通过url请求去改login的图片
比如,我想将-学习.jpg改成-打游戏.jpg,我只要在前端进行操作就行了,下次请求login的时候
就不是学习.jpg,而是打游戏.jpg
是吧。这样就完成了一个简单的ui开发的网络资源管理器。

这就是end:

 

https://i-blog.csdnimg.cn/blog_migrate/11c51920b397a0fc9c3f5412a910e6dd.gif

 

 

 

 

 

 

 

 

两个需求提出来之后,就是我们如何解决的问题?

首先,来分析第一个需求,如果你都认真看过我之前写过的文章相信问题不大,但第二个问题里面,就存在一些的问题。

嘛,我们来一一解决好了。
首先当然是要创建一个资源管理的.jsp
ResourcesManager.jsp

祖传开头:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>


<html>
<head>
<title>资源管理器</title>
<meta name="viewport" content="width=device-width; initial-scale=1.4; minimum-scale=1.0; maximum-scale=2.0"/>

</head>
<body>


</body>


</html>

 

我们需要定义一个表单用来提交我们的Login.jpg
...
我的页面太丑了,等我学下css目前的时间是2018年9月21日下午两点29分
。。。css学习中......
总算也是踩了很多坑哈。
嘛,现在我就来慢慢说一下这个实现原理吧。
首先,我们布局一下

<style type="text/css">

div {
    width: 220px;
    height:300px;
    padding: 10px;
    border: 5px solid gray;
    margin: 0; 
    float:left;
}
form{border-width:5px;}
input {color:red;margin-top:20px;width:200px}
label {font-family:"Times New Roman", Times, serif;color:blue;border-style:solid;
    border-width:5px;margin-left:50px;
    
    
    }
img{ width: 220px;
    height:300px;}
</style>

使用内置css的方式,嘛,这里顺便解释一下,为了特别菜鸡的像我这种
的解释一下,css在jsp里面的使用是有三种情况
(1)外联:即使用外部.css文件,这种嘛,模块化,用于解耦
哦,顺便解释下什么叫解耦
简单的说:就是模块化。
好了,另外一种方式就是
(2)内置style
比如
<img style = "width = 500">
这种,最后就是我这种
(3)内联了。
这种方式嘛,我从我学了一下午css(现在是2018年9月21日20:23)
然后果断就喜欢了这种内置的。布局完后,这是效果图。接着,我需要去实现下前端,前端做什么呢?就一点,发文件!

<div>
    <form action="Login.jpg" method="post" enctype="multipart/form-data">         
      <input type="file" name="file"/><br/>   
     <button type="submit" >提交</button>
    </form>

</div>

至于这里的<div>就是画的格子,表示好看点,上面还用css给他点缀了下哈哈。
至于这里,我再解释下,之前有两章关于@RequestMapping的关于文件提交的一章,具体是哪一张我忘了,那一张讲的有些朦胧
用一种下定义的讲法,并没有侧面剖析,嘛,你可以理解为你看我的文章之后的彩蛋啦(嘛,菜鸡终于要进步了哈哈)

action = "Login.jpg"
没啥,就是典型的动作映射,通过servlet映射给controller。

enctype="multipart/form-data"固定形式,用于给文件编码,
 method="post"指定你的传输方法。
<input type="file" name="file"/><br/>   用于提交文件,type不允许更改,这是文件类型的传输,name可以改。

至于submit就是提交按钮啦!

文件提交之后,我们需要更新我们的服务器呗

@RequestMapping("/Login.jpg")
    public String returnLoginPic(
            HttpServletRequest request,    
            @RequestParam(value="file",required=false) MultipartFile file            
            )throws Exception
    {
        
        if(!file.isEmpty()){
    
            file.transferTo(new File("C:\\Users\\Skady_cat\\Desktop\\Iamge库\\"+"Login.jpg"));
        
        }
        
        return "ResourcesManager";

    }


直接就刷新一下。

然后,我们右边的这个图片再请求一下获得图片

<div>
<img src="http://localhost:8080/test/returnPic?key=Login.jpg">
</div>

这里,请求获得图片通过returnPic映射给控制器,?后的key为传递参数,这个控制器下的图片返回策略(函数)的实现原理其实
非常简单,就是将参数读出来,然后去文件夹里面找,找到一Login.jpg然后response
是吧。非常简单,我这里贴一下这个函数

@RequestMapping(value = "/returnPic")
    public void returnPic(
            HttpServletResponse response,
            HttpServletRequest request, 
            @RequestParam("key") String key
            )throws Exception {  
       try{
             System.out.println(key);
           
           FileInputStream fis = new FileInputStream("C:\\Users\\Skady_cat\\Desktop\\Iamge库\\"+key); // 以byte流的方式打开文件 d:\1.gif   
        int i=fis.available(); //得到文件大小   
        byte data[]=new byte[i];   
        fis.read(data);  //读数据   
        response.setContentType("image/*"); //设置返回的文件类型  
        request.setAttribute ("mainCode", "99999999999");
       
        
        OutputStream toClient=response.getOutputStream(); //得到向客户端输出二进制数据的对象   
        toClient.write(data);  //输出数据   
        toClient.flush();  
        toClient.close();   
        fis.close();
             
        
       }catch(Exception e){
       e.printStackTrace();
       System.out.println("图片不存在");
       }
       System.out.println("请求lll");
    }


    
然后是完整的前端代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>


<html>
<head>
<title>资源管理器</title>
<meta name="viewport" content="width=device-width; initial-scale=1.4; minimum-scale=1.0; maximum-scale=2.0"/>
<style type="text/css">

div {
    width: 220px;
    height:300px;
    padding: 10px;
    border: 5px solid gray;
    margin: 0; 
    float:left;
}
form{border-width:5px;}
input {color:red;margin-top:20px;width:200px}
label {font-family:"Times New Roman", Times, serif;color:blue;border-style:solid;
    border-width:5px;margin-left:50px;
    
    
    }
img{ width: 220px;
    height:300px;}
</style>
</head>
<body>
<div>
	<form action="Login.jpg" method="post" enctype="multipart/form-data">    	 
	  <input type="file" name="file"/><br/>   
     <button type="submit" >提交</button>
    </form>

</div>

<div>
<img src="http://localhost:8080/test/returnPic?key=Login.jpg">
</div>



</body>


</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值