当前位置: 首页 > 知识库问答 >
问题:

如何使用expressJS/connect/crypto获得(大)文件的校验和?

郑星雨
2023-03-14
  //express setup app.js
  app.use('/upload',express.bodyParser({
      defer : true, //enable progress event
      keepExtensions : true,
      limit : app.locals.fileLimit,
      uploadDir : path.join( __dirname, '..', 'tmp'),
      hash : true //this doesnt appear to do anything
  }));

  //express route routes.js
  app.post("/upload", function(req, res){

      var fs     = require('fs');
      var format = require('util').format;

      req.form.hash = true; //this doesnt return the hash for some reason

      req.form.on('fileBegin', function(err) {
         log.info("Starting new upload...");
      });

      req.form.on('file', function(name, file) {
          fs.rename(file.path, req.form.uploadDir + "/" + file.name);
        console.info(file);
      });

      req.form.on('error', function(err) {
         log.error('error',err);
         req.resume();
      });



      req.form.on('field', function(field, value) {
         log.info("Passed Field (%s=%s)...",field,value);
      });

      //this part event never gets called for some reason but
      //I imagine this is where you might do a hash update
      req.form.on('part', function(part){
        console.log('PART upload %s %s', part.name, part.filename);
        var out = fs.createWriteStream('../tmpstrm/' + part.filename);
        part.pipe(out);
      });


      req.form.on('progress', function(bytesReceived, bytesExpected) {
          var percent = (bytesReceived / bytesExpected * 100) | 0;
          console.info( "PROGRESS :"+ ((bytesReceived / bytesExpected)*100) + "% uploaded");
      });

      req.form.on('end', function() {
          var fileInfo = format('\nuploaded %s (%d Kb) to %s as %s'
            , req.files.upload.name
            , req.files.upload.size / 1024 | 0
            , req.files.upload.path
            , req.body.title);

          res.locals.fileInfo = fileInfo; //renders info in jade

          res.render('media/index');
      });

  });
var hash = crypto.createHash('sha1');
var data = // incoming file data

data.on('data', function(chunk){
  hash.update(chunk);
});
data.on('end', function(){
  var sha = hash.digest('hex');

  // Do something with it
})

共有1个答案

徐杰
2023-03-14

在我的Writer-Digest npm模块源代码中,您可能会发现一些示例代码很有帮助:

https://github.com/focusaurus/writers-digest/blob/ab52ffca6e989ca657dc449e05ff258c428fa3af/index.js#l38

但基本上有两种方法:

 类似资料:
  • 问题内容: 我正在寻找使用Java获取文件的MD5校验和。我真的很惊讶,但是我找不到任何能显示如何获取文件的MD5校验和的东西。 怎么做? 问题答案: 有一个输入流装饰器,因此你可以像往常一样在使用输入流的同时计算摘要,而不必对数据进行额外的传递。

  • 问题内容: 我尝试使用Jaxb在变量中获取验证消息。从此处尝试示例http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/api/javax/xml/bind/Unmarshaller.html 我的代码: 但是什么也没发生。我究竟做错了什么 ? 问题答案: 以下内容应有所帮助: JAXB2ValidationEve

  • 问题内容: 我正在使用find来查找目录中的所有文件,因此获得了路径列表。但是,我只需要文件名。即我得到,我想得到 问题答案: 在GNU中,您可以使用参数,例如:

  • 问题内容: 我正在为大型视频文件创建MD5校验和。我当前正在使用代码: 但这会创建一个内存缓冲区,并且对于大型视频文件而言并不理想。Swift中是否有一种方法可以计算读取文件流的MD5校验和,从而使内存占用量最小? 问题答案: 您可以分块计算MD5校验和,例如在?中有没有一个MD5库不需要同时输入全部内容?。 这是使用Swift的可能实现(现已针对Swift 5更新) 需要自动释放池来释放所返回的

  • 问题内容: 看到代码: 问题答案: 较新的编辑: 自从最初发布此问题以来,很多事情已经发生了变化-wallacer的修订后的答案以及VisioN的出色表现中有很多非常好的信息 编辑: 仅仅因为这是公认的答案;wallacer的答案确实好得多: 我的旧答案: 应该做。 编辑: 为了回应PhiLho的评论,请使用类似以下内容的内容:

  • 我正在使用iTextSharp从PDF文件中读取文本。然而,有些时候我不能提取文本,因为PDF文件只包含图像。我每天下载同样的PDF文件,我想看看PDF是否被修改过。如果无法获得文本和修改日期,那么MD5校验和是判断文件是否已更改的最可靠方法吗? 如果是的话,一些代码示例将会很感激,因为我对密码学没有太多的经验。