搜索文档 /

从文件系统加载照片

内容

我们实现了拍照和保存到文件系统。还缺少最后一个功能:照片存储在文件系统中,但我们需要一种方法来保存每个文件的指针,以便它们可以在相册中再次显示。

幸运的是,这很简单:我们将利用电容器 存储API 将我们的照片数组存储在一个键值存储中。

存储API

方法之前定义一个常量变量作为存储的键 usePhotoGallery 函数定义在 src /钩/ usePhotoGallery.ts


              常量
             
              PHOTO_STORAGE
             
              
             
              “照片”
              
             
              出口
             
              函数
             
              usePhotoGallery
              
              
             
              
              
复制 复制

然后,使用 存储 类访问用于读写设备存储的get和set方法:

最后 takePhoto 函数,添加对的调用 Storage.set () 保存Photos数组。通过在这里添加它,每次拍摄新照片时都会存储Photos数组。这样,当应用程序用户关闭或切换到不同的应用程序时,所有的照片数据都会被保存。


             存储
              
              
              
              
             关键
              
             
              PHOTO_STORAGE
              
             价值
              
             
              JSON
              
              stringify
              
             newPhotos
              
             
              
              
              
复制 复制

保存了照片数组数据后,我们将创建一个方法,该方法将在钩子加载时检索数据。我们将使用React的 useEffect 钩。把它插入 takePhoto 声明。下面是代码,我们来分解一下:


              useEffect
              
              
              
             
              =>
             
              
             
              常量
             
              loadSaved
             
              
             
              异步
             
              
              
             
              =>
             
              
             
              常量
             
              
             价值
              
             
              
             
              等待
             存储
              
              得到
              
              
             关键
              
             
              PHOTO_STORAGE
             
              
              
              
             
              常量
             photosInStorage
              
             
              
             价值
              
             
              JSON
              
              解析
              
             价值
              
             
              
             
              
              
              
             
              作为
             UserPhoto
              
              
              
             
              
             
              
              
             照片
              
             photosInStorage
              
             
              
             
              常量
             文件
              
             
              等待
             文件系统
              
              readFile
              
              
             路径
              
             照片
              
             filepath
              
             目录
              
             目录
              
             数据
              
             
              
              
              
             
              //仅Web平台:加载照片作为base64数据
             照片
              
             webviewPath
              
             
               
               数据:图像/ jpeg; base64,
                $ {
               文件
                
               数据
                
               
              
             
              
             
              setPhotos
              
             photosInStorage
              
              
             
              
              
             
              loadSaved
              
              
              
             
              
              
             
              
              
              
              
复制 复制

乍一看,这似乎有点可怕,所以让我们来看看它,首先看看我们传递给钩子的第二个参数:依赖数组 []

默认情况下,每次组件呈现时都会调用useEffect钩子,除非我们传入一个依赖数组。在这种情况下,它只会在依赖项更新时运行。在我们的例子中,我们只希望它被调用一次。通过传入一个不会被更改的空数组,可以防止钩子被多次调用。

第一个参数 useEffect 是将被效果调用的函数。我们传入一个匿名箭头函数,在它内部定义另一个异步方法,然后立即调用这个。我们必须在钩子内部调用async函数,因为钩子回调本身不能是异步的。

在移动端(下一个!),我们可以直接设置图像的来源标签- < img src = " x " / > -到文件系统上的每个照片文件,自动显示它们。然而,在web上,我们必须将文件系统中的每个映像读入base64格式,因为文件系统API将它们存储在base64中 IndexedDB 在引擎盖下。

就是这样!我们已经在我们的Ionic应用程序中建立了一个完整的图片库功能,可以在网络上运行。betway东盟体育app接下来,我们将把它转化为iOS和Android的移动应用程序!

以前的
在文件系统上保存照片
下一个
添加移动
Baidu