java springMVC 图片缓存问题

来源:互联网 发布:415打击网络政治谣言 编辑:程序博客网 时间:2024/05/01 23:20

现在做的项目,需要将图片一次性加载到页面上,我试过从数据库里面读二进制,发现花的时间太长,基本上要十几秒才能加载出来,而且图片越多加载越慢,就想着怎么能将图片下载到本地,再去读本地的地址,这样肯定就会快很多,事实上确实如此。废话不多说,代码上来。

因为这里讲的是图片缓存,上传图片在这里就不多说了

 public void pageLoad()
    {
        String itemtype = "checkpointphoto";
        String str = "";
        String str2 = "";
        String sql = "select * from frame_attachstorage sto LEFT JOIN  frame_attachinfo info on sto.ATTACHGUID=info.ATTACHGUID where info.uploaduserguid = '"
                +userSession.getUserGuid()+"' and sto.contenttype like 'image%'";
        if(StringUtil.isNotBlank(itemtype)){
            sql += "and sto.cliengtag = '"+itemtype+"'";
        }
        List<FrameAttachStorage> attaches = service.findList(sql, FrameAttachStorage.class);
        for( int i=0;i<attaches.size();i++){
            FrameAttachStorage storage = attaches.get(i);
            String type = storage.getContentType();
            if(".png".equals(type)||".jpg".equals(type)||".jpeg".equals(type)||".gif".equals(type)||".bmp".equals(type)){
                
              //下载到本地
                FileMkdir fm = new FileMkdir();

//decideFile 是下面要调用到的方法,这个很关键
                String url = fm.decideFile(storage);
                //拼接前台内容
                if(i==0){
                    str += "<li style=\"z-index: 1;\"><img height=\"380\" width=\"650\" src=\"" + url + "\" /></li>";
                    str2 += "<li style=\"filter: alpha(opacity : 100); opacity: 1;\"><img src=\"" + url + "\" /></li>";
                }else{
                    str += "<li><img height=\"380\" width=\"650\" src=\"" + url + "\" /></li>";
                    str2 += "<li><img src=\"" + url + "\" /></li>";
                } 
            }
        }

//传给前台
        addCallbackParam("str", str);
        addCallbackParam("str2", str2);
    }

下面的这个方法是我写的公共类里面的,方便复用

public String decideFile(FrameAttachStorage storage){
        //获取当前项目路径
        String pwd = System.getProperty("user.dir");
        //查找图片路径下有没有需要加载的图片,如果没有就从数据库里面下载
        File file=new File(pwd+"/src/main/webapp/pages/images/"+storage.getAttachGuid()+".jpg");    
        if(!file.exists()) {
            try {
                BufferedImage bufferedImage = ImageIO.read(storage.getContent());
                Image image = bufferedImage.getScaledInstance(bufferedImage.getWidth(), bufferedImage.getHeight(), Image.SCALE_DEFAULT);
                BufferedImage outputImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
                Graphics graphics = outputImage.getGraphics();
                graphics.drawImage(image, 0, 0, null);
                graphics.dispose();
                ImageIO.write(outputImage, "jpg", new File(pwd+"/src/main/webapp/pages/images/"+storage.getAttachGuid()+".jpg"));
            }
            catch (IOException e1) {
                e1.printStackTrace();
            }
        }  
        String url = "../../images/"+storage.getAttachGuid()+".jpg";
        return url;
    }


这样就可以直接从本地读取图片了,一般加载几十张图片两秒内都能搞定

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小鸡躺着不动还呼吸怎么办 老人身体不舒服不敢去检查怎么办 金毛上火鼻子干怎么办 狗鼻子干裂结壳怎么办 小狗吐了没精神怎么办 狗狗又吐又拉怎么办 孕妇嘴干鼻子干怎么办 狗狗打了针皮肤变硬怎么办 狗狗得了狗瘟怎么办 金毛得了犬瘟怎么办 泰迪身上起皮怎么办 狗狗鼻子干了怎么办 泰迪生病鼻子干怎么办 痔疮手术后肛门狭窄怎么办 乳腺导管扩张奶头疼怎么办 3月的宝宝要扩肛才拉便便怎么办 怀孕期间肛门长痔疮怎么办 射精后检查尿液发现蛋白尿怎么办 铁距孔被小孩拿体温计塞了怎么办 肛门长了个息肉怎么办 不小心吃了虫卵怎么办 孕妇做四维宝宝不配合怎么办 孕妇四维小孩不配合怎么办 孕妇吃了甜酒酿怎么办 屁股疼的不能动怎么办 小孩打针后手臂疼痛怎么办 屁股打针的地方疼怎么办 眼底坏了怎么办怎么治 大疆无人机飞丢了怎么办 两岁半宝宝发热灌肠后便秘怎么办 发烧灌肠后一直拉稀怎么办 孩子便秘用开塞露引起肚子疼怎么办 老人大便干燥拉不出来怎么办 海底捞排队过号怎么办 脱毛后吃了海鲜怎么办 脂肪填充变丑了怎么办 全切双眼皮伤口长包怎么办 鼻综合修复眼中心修太宽怎么办 fgo的id忘了怎么办 电脑下载模拟器显示内存不够怎么办 安逍遥模拟器运行一段时间卡怎么办