Ajax清除浏览器js、css、图片缓存的方法


Posted in Javascript onAugust 06, 2015

做东东时都是把图片在服务器的地址存放在数据库里面,然后到浏览器中显示,但是后来发现了两个问题。

第一:为了安全起见,js是无法读取本地的图片的,不然你写一个js,岂不是可以获取任何人电脑里面的文件了。

第二:图片存在的是在服务器的硬盘上面,而不是在客户的硬盘里面,所以也是取不到的

后来在网上找方法,找的方法,都是各种转换二进制到xml中,的各种高大上的答案,然后本人又实在太懒了,就自己想了一个

方法,就是利用BufferedImage这个类。

开始

首先说说我的思路,就是把本地的图片,加载到内存中,然后放到BufferedImage这个缓冲流中,然后利用ImageIO.write(),这下大家都估计想得到一种思路了,但是如果说ajax,得到的数据,估计还是啥个乱七八糟的啥吧!没关系,稍后介绍。

工具类

首先建立一个加载图片的工类具,把一个图片的地址当参数存进去,得到这个图片的缓冲流:

/**
   * 根据图片的地址,返回图片的缓冲流
   * @param addr
   * @return
   */
  public static BufferedImage getInputStream(String addr){
    try {
      String imgPath = addr; 
      BufferedImage image = ImageIO.read(new FileInputStream(imgPath));
      return image;
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println();
      System.out.println("获取图片异常:java.awt.image.BufferedImage");
      System.out.println("请检查图片路径是否正确,或者该地址是否为一个图片");
    }
    return null;
  }

没错,就是使用ImageIO.read,来加载流对象,然后就是处理类的代码了,这是我用的是springMVCspringMVC这段时间

比较火,所以我也好少用struts2了

处理类

/**
   * 根据图片的地址,来获取图片
   * @param addr
   * @param response
   */
  @ResponseBody
  @RequestMapping("/getImg")
  public void getImg(@Param("addr")String addr,HttpServletResponse response){
    BufferedImage img = new BufferedImage(300, 150, BufferedImage.TYPE_INT_RGB);
    img = ImgUtil.getInputStream(addr);
    if(img==null){
      throw new RuntimeException("打印图片异常:com.controller.Business_Ctrl.getImg(String, HttpServletResponse)");
    }
    if(img!=null){
      try {
        ImageIO.write(img, "JPEG", response.getOutputStream());
      } catch (IOException e) {
        e.printStackTrace();
        System.out.println("打印异常:com.controller.Business_Ctrl.getImg(String, HttpServletResponse)");
      }
    }
  }

很明显,使用ImageIO.read()读到图片时,就用ImageIO.write(),输出图片,输入流就是

HttpServletResponse.getOutputStream()

客户端

 

 function setImg(addr){



 

                $("#logo").attr("src","business/getImg?addr="+addr+"");

            }

如图所示,当需要加载图片的时候,就触发setImg方法,给它一个地址,当然,地址,早已经从后台传到前台了,自然,就算没有地址,稍微变一下,也可以在后台得到地址,然后返回,然后给img标签设置src属性,就可以得到图片了。

下面介绍下jquery1.2版本运用Ajax清除浏览器js、css、图片缓存的方法。

jquery自从1.2开始就有ifModified和cache参数了,不用自己加header

ifModified Boolean Default: false 
Allow the request to be successful only if the response has changed since the last request. This is done by checking the Last-Modified header. Default value is false, ignoring the header. 
cache Boolean Default: true 
Added in jQuery 1.2, if set to false it will force the pages that you request to not be cached by the browser. 
$.ajax({
type: "GET",
url: "static/cache.js",
dataType: "text",
cache:false,
ifModified :true
});
Javascript 相关文章推荐
JQuery 学习笔记 选择器之三
Jul 23 Javascript
三级下拉菜单的js实现代码
May 23 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
Jun 05 Javascript
深入解析contentWindow, contentDocument
Jul 04 Javascript
判断日期是否能跨月查询的js代码
Jul 25 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
Oct 17 Javascript
javascript中的Base64、UTF8编码与解码详解
Mar 18 Javascript
Jquery中attr与prop的区别详解
May 27 jQuery
AngularJS中下拉框的基本用法示例
Oct 11 Javascript
JS实现百度搜索接口及链接功能实例代码
Feb 02 Javascript
vue forEach循环数组拿到自己想要的数据方法
Sep 21 Javascript
koa中间件核心(koa-compose)源码解读分析
Jun 15 Javascript
jQuery实现动画效果circle实例
Aug 06 #Javascript
jQuery动态星级评分效果实现方法
Aug 06 #Javascript
javascript使用输出语句实现网页特效代码
Aug 06 #Javascript
JS实现霓虹灯文字效果的方法
Aug 06 #Javascript
javascript实现网页背景烟花效果的方法
Aug 06 #Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
Aug 06 #Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 #Javascript
You might like
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
php setcookie函数的参数说明及其用法
2014/04/20 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
php类常量用法实例分析
2015/07/09 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python functools模块学习总结
2015/05/09 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
django 常用orm操作详解
2017/09/13 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
对Python函数设计规范详解
2019/07/19 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
如何理解python中数字列表
2020/05/29 Python
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
为什么要有struct关键字
2012/05/08 面试题
大学生优秀自荐信范文
2014/02/25 职场文书
发布会邀请函
2015/01/31 职场文书
《叶问2》观后感
2015/06/15 职场文书
宣传稿格式范文
2015/07/23 职场文书