当前位置: 首页 > news >正文

nodejs中下载文件回调问题

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

  • 使用Request模块下载文件,pipe方法写入文件流,后续对文件计算hash值,出现hash值出错的问题,代码如下:

            request
            .get(aliyunFilePath, {
                headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36'}
            })
            .on('error', function (err) {
                cont(tools.apiErr(err));
            })
            .on('response', function (response) {
                response.on('end', function () {
                    if (response.statusCode === 200) {
                        filePath = localFilePath;
                        cont(null);
                        return;
                    }

                    cont(tools.apiErr('文件下载失败:' + response.statusCode));
                });
            })
            .pipe(fs.createWriteStream(localFilePath));
            
            。。。
            
            var fileMD5 = security.fileMD5(filePath);

  • 查询分析发现,文件写入流有个finish事件,而不应该使用response的end事件,参考:https://github.com/request/request/issues/1645,修正后的代码如下:

    request
    .get(aliyunFilePath, {
        headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36'}
    })
    .on('error', function (err) {
        cont(tools.apiErr(err));
    })
    .on('response', function (response) {
        response.on('end', function () {
            if (response.statusCode !== 200) {
                cont(tools.apiErr('文件下载失败:' + response.statusCode));
            }
        });
    })
    .pipe(fs.createWriteStream(localFilePath))
    .on('finish', function () {
        filePath = localFilePath;
        cont(null);
    });
    
    。。。
    
    var fileMD5 = security.fileMD5(filePath);

  • 写在这里,以作记录。

转载于:https://my.oschina.net/runescape/blog/659643

相关文章:

  • 你所不知的SEO高级策略技巧
  • 利用枚举类型实现统计
  • Educational Codeforces Round 9
  • 游戏坦克大战 说明(待续。。。)
  • json.dumps loads 终于区分出来了
  • js自己初探究
  • 从Sql server 2008获取表字段属性信息,注释信息
  • 定制UITabBar显示样式
  • C实现的静态顺序表
  • 053(三十二)
  • cacti (不可以利用yum安装cacti的配置)
  • 判断一个字符串是否为另外一个字符串旋转之后的字符串。
  • Library ‘/system/lib/libhoudini.so’ not found
  • CentOS里设置JAVA_HOME
  • C#、OC递归锁
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • docker-consul
  • Java 最常见的 200+ 面试题:面试必备
  • laravel5.5 视图共享数据
  • linux安装openssl、swoole等扩展的具体步骤
  • mysql innodb 索引使用指南
  • Netty源码解析1-Buffer
  • Octave 入门
  • ViewService——一种保证客户端与服务端同步的方法
  • web标准化(下)
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 对象管理器(defineProperty)学习笔记
  • 记一次删除Git记录中的大文件的过程
  • 面试遇到的一些题
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 小程序01:wepy框架整合iview webapp UI
  • 学习使用ExpressJS 4.0中的新Router
  • HanLP分词命名实体提取详解
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​flutter 代码混淆
  • #100天计划# 2013年9月29日
  • $GOPATH/go.mod exists but should not goland
  • (1)Nginx简介和安装教程
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转载)虚函数剖析
  • **PHP二维数组遍历时同时赋值
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .net/c# memcached 获取所有缓存键(keys)
  • .net网站发布-允许更新此预编译站点
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • ::前边啥也没有
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @AliasFor注解
  • @Bean, @Component, @Configuration简析