如何在React-Native(Expo)中散列图像数据?

时间:2018-04-09 04:50:15

标签: react-native expo

我的意图:

我希望我的应用将图片上传到S3。如果图像已存在,则服务器应记录对现有图像的引用,而不是要求上载另一个副本。

我的想象是有效的:

  1. 哈希图像数据
  2. 向服务器发送哈希并请求签名网址(上传到AWS S3)
  3. 如果哈希匹配已存储的内容,请引用它并告诉应用
  4. 初步想法:

    使用imageEditor.cropImage将图片转换为ImageStore,这会给我一个合适的uri。然后使用getBase64ForTag(uri, success, failure)检索base64数据以进行哈希计算。

    问题:

    根据question的答案,这个过程至少效率不高。通常的解决方案是使用本机方法,如此question的答案中所述,但我不想为此功能弹出我的Expo应用程序。

    我的问题:

    有没有更好的方法来散列图像数据?或者更重要的是,是否有更好的方法可以确保在S3存储中不会复制相同的图像?

2 个答案:

答案 0 :(得分:1)

事实证明,世博会开箱即用。

Expo.FileSystem.getInfoAsync

myImageHashFunction = async (imageUri) => {
  let fsInfo = await Expo.FileSystem.getInfoAsync(imageUri, [{ md5: true }] )
  console.log(fsInfo.md5)
}

答案 1 :(得分:0)

如果您仍在寻找解决方案:

这就是我的工作方式-创建图片的base64,然后为其创建哈希。

import * as FileSystem from 'expo-file-system';
import * as Crypto from 'expo-crypto';

let info = await FileSystem.readAsStringAsync(imageUri, 
   { encoding: FileSystem.EncodingType.Base64 });

const hashData = await Crypto.digestStringAsync (
    Crypto.CryptoDigestAlgorithm.MD5,
    info
 )