nodejs怎样获取一个上传文件的MD5码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs怎样获取一个上传文件的MD5码?相关的知识,希望对你有一定的参考价值。

如题,
1.我现在做了个文件服务器,从页面上传来的文件,希望获取他的MD5码来识别服务器是否已经存在这个数据.
怎么破?
2.如果希望利用socket.io来上传文件怎么做?前后台.
多谢.

  MD5中的MD代表Message Digest,就是信息摘要的意思,不过这个信息摘要不是信息内容的缩写,而是根据公开的MD5算法对原信息进行数学变换后得到的一个128位(bit)的特征码。
  1、D5就是求字符串的md5,文件就是一个字符串;
  2、前台目前就别考虑读文件内容了(大部分浏览器不行) 都让后台做;
  可以直接看nodeclub源代码,如下:
  var crypto = require(\'crypto\');
  exports.encrypt = function (str, secret)
  var cipher = crypto.createCipher(\'aes192’, secret);
  var enc = cipher.update(str, \'utf8’, ‘hex’);
  enc += cipher.final(‘hex’);
  return enc;
  ;

  exports.decrypt = function (str, secret)
  var decipher = crypto.createDecipher(\'aes192’, secret);
  var dec = decipher.update(str, \'hex’, ‘utf8’);
  dec += decipher.final(‘utf8’);
  return dec;
  ;

  exports.md5 = function (str)
  var md5sum = crypto.createHash(‘md5’);
  md5sum.update(str);
  str = md5sum.digest(‘hex’);
  return str;
  ;

  exports.randomString = function (size)
  size = size || 6;
  var code_string = \'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789’;
  var max_num = code_string.length + 1;
  var new_pass = \'’;
  while (size > 0)
  new_pass += code_string.charAt(Math.floor(Math.random() * max_num));
  size–;
  
  return new_pass;
  ;
参考技术A 你写JS 在前台处理该文件,获得 MD5值 ,上传服务器进行查询,如果有,就提示上传成功,没有就 继续上传。其实 AJAX就可以了吧,貌似不需要socket.io...如果用的话,表示没怎么看,但是应该很简单吧追问

但是首先上传的时候我要保存MD5查询的时候才能用啊.所以后台也要取的

前台js可以获取文件的md5?

参考技术B 1、可以在内存存储所有文件的MD5值。具体的可以生成一个Map,key值为MD5,value为文件路径。当上传文件时,查看该文件的md5值是否存在于内存的Map,若不存在,则上传文件,同时更新该Map,将该文件存于Map中。否则不需要上传。
2、socket.io采用事件驱动。所以文件的上传的连接、结束以及传送数据都可以作为一个事件来处理。具体的处理可以看下formidable模块。追问

前台除了html5和flash还有没有其他办法获取文件的md5?

后台保存了可是前台没有的话也是没办法去匹配的啊

追答

js完全可以帮你在前台轻松获取文件的Md5值。具体请看这里
http://stackoverflow.com/questions/768268/how-to-calculate-md5-hash-of-a-file-using-javascript

获取文件的MD5码

        /// <summary>
        /// 获取文件的MD5码
        /// </summary>
        /// <param name="filePath">文件路径</param>
        /// <returns>MD5码</returns>
        private static string GetFileMD5(string filePath)
        {
            try
            {
                var file = new FileStream(filePath, FileMode.Open);
                MD5 md5 = new MD5CryptoServiceProvider();
                var retval = md5.ComputeHash(file);
                file.Close();

                var stringBuilder = new StringBuilder();
                foreach (var t in retval)
                {
                    stringBuilder.Append(t.ToString("x2"));
                }
                return stringBuilder.ToString();
            }
            catch (Exception)
            {
                return null;
            }
        }

以上是关于nodejs怎样获取一个上传文件的MD5码?的主要内容,如果未能解决你的问题,请参考以下文章

使用formidable上传文件,文件为空.请问是怎么回事

上传文件需要MD5值,这个是啥?

nodejs 怎么获取文件大小

怎样将SWF文件上传到网页上

nodejs上传的文件如何使用

获取txt md5值上传文件完整性校验