Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React(本机)图像存储/获取良好实践_Reactjs_Image_React Native_Realm - Fatal编程技术网

Reactjs React(本机)图像存储/获取良好实践

Reactjs React(本机)图像存储/获取良好实践,reactjs,image,react-native,realm,Reactjs,Image,React Native,Realm,我的用例是一个带有react native的移动应用程序,但我想这是非常常见的好做法 我希望能够在应用程序中(从相机或图库)拍摄图像,并能够存储图像,以便从添加日期或用户添加的某些元数据中提取图像 理论似乎很简单,一种方法是: 使用任何库(例如)获取图像 将图像存储为base64,并将元数据存储在,比如说(一些内部数据库) 查询此数据库以获取我想要的内容 这应该是可行的,而且应该很容易实现。 但我想知道一些事情: 根据智能手机摄像头的性能,将其存储为base64(并且没有校验和,占用更多内

我的用例是一个带有react native的移动应用程序,但我想这是非常常见的好做法

我希望能够在应用程序中(从相机或图库)拍摄图像,并能够存储图像,以便从添加日期或用户添加的某些元数据中提取图像

理论似乎很简单,一种方法是:

  • 使用任何库(例如)获取图像
  • 将图像存储为base64,并将元数据存储在,比如说(一些内部数据库)
  • 查询此数据库以获取我想要的内容
这应该是可行的,而且应该很容易实现。 但我想知道一些事情:

  • 根据智能手机摄像头的性能,将其存储为base64(并且没有校验和,占用更多内存,…)不是很丢脸吗
  • 这种格式,base64,通常用于存储图像不是一个坏主意吗
  • 将图像存储在RealmJS中是否是一个好主意,因为重复使用图像(在facebook上共享)会让用户感到痛苦,但另一方面,如果我将其写入智能手机并存储URI,可能会导致很多问题(如果用户删除它,则会丢失文件,需要访问内存,…)
  • 这种方法是“干净”的吗(好的,它可以工作,但是
如果您有任何经验、技巧或良好实践可供分享,我很乐意与您分享:)

您可以在Realm中存储二进制数据(图像)。但是,如果您在本地使用领域(而不是同步),我建议您将映像存储在文件系统中,并将路径存储在领域中。您的模型可能类似于:

const ImageSchema = {
    name: 'Image',
    properties: {
        path: 'string',
        created: 'Date',
        modified: 'Date?',
        tags: 'Tag[]'
     }
 };

 const TagSchema = {
     name: 'Tag',
     properties: {
         name: 'string',
         images: { type: 'linkingObjects', objectType: 'Image', property: 'tags' }
     }
};
也就是说,对于每个图像,存储其创建的时间戳。此外,如果图像已被修改,则它具有可选的时间戳。属性
path
是查找图像的位置。如果希望存储图像,可以使用
data
类型的属性。要查找少于一周的图像,可以使用
realm.objects('image').filtered('created>=$1',newdate(Date.now()-7*24*60*60))


为了好玩,我为每个图像添加了一个标签列表。
标记中的
linkingObject
可以找到所有具有特定标记的图像,例如,
realm.objects('Tag')。过滤('@links.Tag.name==“Dog”)

是的,我会这样做,事实上我已经创建了我的模式,似乎存储了一个URI数组(字符串)这是一种最健壮的方法,可以在领域中不添加太多内容。感谢链接对象的提示!它打开了许多问题的大门(比如用户通过其他应用删除图像等),但在我的使用案例中,它似乎是可以接受的。