indexDB的使用和异步图片blob文件保存

2024-06-19 21:58

本文主要是介绍indexDB的使用和异步图片blob文件保存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//调整webkit兼容性
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB,
   IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.OIDBTransaction || window.msIDBTransaction,
   dbVersion = 1.0;
 
var cn,db;
 
//打开数据库
//第一个参数是数据库名(打开即创建,没有其它独立的创建方法)
//其它参数以后解释
var cn=indexedDB.open( "item" );
 
//数据库初始化事件
cn.onupgradeneeded= function (e){
  //获取数据库对象
  db=e.target.result;
  //创建数据库实例
  //第一个是存储对象名,类似关系数据库的表名
  //第二个参数是主键名,还有其他选项,可以设置自增的
  var o=db.createObjectStore(
    "PicData" ,{keyPath: "id" }
  );
};
 
//数据库打开成功事件
cn.onsuccess= function (e){
  //获取数据库对象
  //因为上面的初始化事件未必会被调用到,这里当然也得获取一次
  db=e.target.result;
  //这个doTransaction的参数是一个回调函数,可以把这个回调函数当作事物的过程使用
  db.doTransaction= function (f){
    //从事务对象闪使用objectStore访问具体的存储对象,并把结果传给回调函数
    f(db.transaction( "PicData" , "readwrite" ).objectStore( "PicData" ));
  };
};
 
// 将图片缓存的本地
  function fetchImage(id, type) {
      var src = ""
      var imageId = id;
      if (type == "small" ) {
          src = "../item/common/simpleImage.do?picId=" +id;
     } else {
          src = "../item/common/simpleImage.do?type=b&picId=" +id;
          imageId = (id+ "blimg" );
     }
     
      var elephant = document.getElementById(id);
     elephant.src = "../item/img/loading.gif" ;
      try {
         var readWriteMode = typeof IDBTransaction.READ_WRITE == "undefined" ? "readwrite" : IDBTransaction.READ_WRITE;
           var transaction = db.transaction([ "PicData" ], readWriteMode);
               
           var objectStore = transaction.objectStore( "PicData" );
           var request = objectStore.get(imageId);
          request.onsuccess = function (event) {
               var data = event.target.result;
               if (data == null ) {
                 // Create XHR
                 var xhr = new XMLHttpRequest(),
                     blob;
          
                 xhr.open( "GET" , src, true );
                 // Set the responseType to blob
                 xhr.responseType = "blob" ;
                
                 xhr.addEventListener( "load" , function () {
                     if (xhr.status === 200) {
                           // Blob as response
                          blob = xhr.response;
                          var imgFile = blob;
              
                          // Get window.URL object
                          var URL = window.URL || window.webkitURL;
              
                          // Create and revoke ObjectURL
                          var imgURL = URL.createObjectURL(imgFile);
              
                          // Set img src to ObjectURL
                          elephant.setAttribute( "src" , imgURL);
              
                          // Revoking ObjectURL
                          elephant.onload = function () {
                              window.URL.revokeObjectURL( this .src);
                          }
                         // Save data in indexDB
                         var picData = {};
                         picData.id = imageId;
                          picData.blob = blob;
                          saveInIndexDB(picData);
                     }
                 }, false );
                 // Send XHR
                 xhr.send();
              } else {
                      console.log( "Got image !" );
          
                      // Get window.URL object
                      var URL = window.URL || window.webkitURL;
          
                      // Create and revoke ObjectURL
                      var imgURL = URL.createObjectURL(request.result.blob);
          
                         // Set img src to ObjectURL
                        Imagess(imgURL,id);
                      //elephant.setAttribute("src", imgURL);
          
                      // Revoking ObjectURL
                      elephant.onload = function () {
                          window.URL.revokeObjectURL( this .src);
                      }
              }
          }
     } catch (e) {
           Imagess(src, id);
     }
}
 
function saveInIndexDB(picData) {
  //调用我们自己添加的方法来处理一个事务
  db.doTransaction( function (e){
     e.add(picData);
  });
}
 
//判断是否加载完成 
function Imagess(url,imgid){     
    var img= new Image(); 
    img.src = url;
   
    //判断浏览器 
      var Browser= new Object(); 
     Browser.userAgent=window.navigator.userAgent.toLowerCase(); 
     Browser.ie= /msie/ .test(Browser.userAgent); 
     Browser.Moz= /gecko/ .test(Browser.userAgent); 
     
    if (Browser.ie){ 
        img.onreadystatechange = function (){   
            if (img.readyState== "complete" ||img.readyState== "loaded" ){ 
                document.getElementById(imgid).src=img.src;
            } 
        }         
    } else if (Browser.Moz){ 
        img.οnlοad= function (){ 
            if (img.complete== true ){ 
                document.getElementById(imgid).src=img.src;
            } 
        }         
    }     
}
 
// 缓存数据
function getItemPicId (currentPage) {
     $.ajax({
          type: "post" ,
          url: "../item/common/cacheItemPic.do" ,
          data:{ "currentPage" :currentPage},
          dataType: "json" ,
          error: function (){
          },
          success: function (data){
              cacheItemPic(data.rows);
              total = data.total;
          }
     });
}
 
// 保存到本地
function cacheItemPic(data) {
      for ( var i=0; i < data.length; i++) {
                var src = ""
               var imageId = data[i].ST_PIC_ID;
               if (data[i].NM_SORT == "1" ) {
                   src = "../item/common/simpleImage.do?picId=" +imageId;
                   cacheImg (imageId, src);
              }
              src = "../item/common/simpleImage.do?type=b&picId=" +imageId;
              imageId = (imageId+ "blimg" );
              cacheImg (imageId, src);
     }
     
      function cacheImg (imgId, imgSrc) {
           try {
              var readWriteMode = typeof IDBTransaction.READ_WRITE == "undefined" ? "readwrite" : IDBTransaction.READ_WRITE;
               var transaction = db.transaction([ "PicData" ], readWriteMode);
                    
               var objectStore = transaction.objectStore( "PicData" );
               var request = objectStore.get(imgId);
              request.onsuccess = function (event) {
                    var data = event.target.result;
                    if (data == null ) {
                      // Create XHR
                     var xhr = new XMLHttpRequest(),
                         blob;
              
                     xhr.open( "GET" , imgSrc, true );
                     // Set the responseType to blob
                     xhr.responseType = "blob" ;
                    
                     xhr.addEventListener( "load" , function () {
                         if (xhr.status === 200) {
                                // Blob as response
                              blob = xhr.response;
                               var imgFile = blob;
                   
                              // Save data in indexDB
                             var picData = {};
                             picData.id = imgId;
                               picData.blob = blob;
                               saveInIndexDB(picData);
                         }
                     }, false );
                     // Send XHR
                     xhr.send();
                   } else {
                        console.log( "Got image !" );
                        objectStore. delete (imgId);
                        console.log( "delete data!" );
                           // Create XHR
                          var xhr = new XMLHttpRequest(),
                              blob;
                   
                          xhr.open( "GET" , imgSrc, true );
                          // Set the responseType to blob
                          xhr.responseType = "blob" ;
                         
                          xhr.addEventListener( "load" , function () {
                              if (xhr.status === 200) {
                                    // Blob as response
                                   blob = xhr.response;
                                    var imgFile = blob;
                        
                                   // Save data in indexDB
                                  var picData = {};
                                  picData.id = imgId;
                                    picData.blob = blob;
                                    saveInIndexDB(picData);
                              }
                          }, false );
                          // Send XHR
                          xhr.send();
                   }
              }
          } catch (e) {
                console.log( "cache image error!" );
          }
     }
}

这篇关于indexDB的使用和异步图片blob文件保存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076256

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念