我正在尝试检查用户是否有本地文件。如果用户这样做,我会得到来制作一个md5。然后我比较这两个值。一个来自firebase文件的元数据,另一个来自消化文件的字节数组。他们从不匹配。当试图生成我上传的文件的md5时,Firebase会做些什么不同吗?Firebase“MD5”&BloddyCrytpo的不匹配
private function handleMetaSuccess(e:StorageReferenceEvent):void
{
trace("Meta succes for reference:" + this.name);
storageMetaData = e.metadata;
trace("reading file.");
fileBA = new ByteArray();
var fs:FileStream = new FileStream();
fs.open(Definitions.CACHE_DIRECTORY.resolvePath(name + ".jpg"), FileMode.READ)
fs.readBytes(fileBA);
fs.close();
var byteHash:String = MD5.hashBytes(fileBA)
trace("Local hash = " + byteHash); //93b885adfe0da089cdf634904fd59f71
trace("Network hash = " + storageMetaData.md5Hash); //bo7XPotC+T5wmAcpagnXBw==
if (byteHash != storageMetaData.md5Hash)
{
trace("Not equal. Getting file."); //Always happens
getFile();
}
else
{
loadFile();
}
}
经仔细inspetion(感谢Organis)火力不返回正确的MD5。它是什么?在我的存储控制台中,我没有看到md5属性,那么这是自动生成的?这些文件通过my rest API上传,基于phantom's指南。
更新:继Organis'关于设法采用MD5我得到并把它变成在一致的错配导致的base64结果的方式Firebase handle's MD5s
var byteHash:ByteArray = new ByteArray();
byteHash.writeUTFBytes(MD5.hashBytes(fileBA));
var byteHashWithLength:ByteArray = new ByteArray();
byteHashWithLength.writeUTF(MD5.hashBytes(fileBA));
trace("Bytehash with length = " + Base64.encode(byteHashWithLength)); //ACAyMTMzYTdmYjczYTEzZDQ3ZDkzMTEyY2I1OWQyYTBmMg==
trace("Plain = " + Base64.encode(byteHash)); //OTNiODg1YWRmZTBkYTA4OWNkZjYzNDkwNGZkNTlmNzE=
trace("Storage md5 = " + storageMetaData.md5Hash); //UsoNl5sL1+aLiAhTOTBXyQ==
评论。当我尝试解码所有内容时,是否有我缺少的参数或错误应用?
** bo7XPotC + T5wmAcpagnXBw == **不是有效的MD5散列。 https://en.wikipedia.org/wiki/MD5 * 128位(16字节)MD5哈希(也称为消息摘要)通常表示为32个十六进制数字的序列。* – Organis
嗯。之后怎么样了?它应该是一个散列。我正在使用distriq的Firebase Storage来获取md5哈希。通过该事件,使用getter storageMetaData.md5Hash相当于android的版本https://firebase.google.com/docs/storage/android/file-metadata#file_metadata_properties – quantomworks
在firebase上找到另一个线程:https:// stackoverflow .com/questions/41380078/firebase-storage-getmetadata-issue看起来它的MD5实现是不同的。此外,还发现另一个页面:https://firebase.google.com/docs/reference/js/firebase.storage.FullMetadata *正在上传对象的Base64编码的MD5散列。*可能是因为它确实是Base64(MD5 (...))而不仅仅是MD5。 – Organis