https下载文件sync-request新坑
发布于 8 年前 作者 smarttang 5187 次浏览 来自 问答

用nodejs主要是做一个调度器,调度器从平台层面接收任务,并且下发到后端的业务中去。 选型用nodejs主要是因为代码简洁,思路清晰,之前用的是python。 另外,用nodejs再效率上比python快一些(同等的资源压测的结果上来看)。 结果进了这个坑就再也出不去了。。。。。

90多kb的压缩包,下载成这样了…

-rw-rw-r--   1 ise     ise       176127 Oct 20 19:09 350bb7d2b2d7a2af7269a0d87a0eec52.zip
-rw-rw-r--   1 ise     ise       175958 Oct 21 10:52 720fa49e2e3a451ff98075b903bf73d9.zip
-rw-rw-r--   1 ise     ise       176183 Oct 20 19:23 950a12017bda1880f91a923e87ca66f4.zip

然后,这种问题我还在调,开个帖子一边调一边给大家复述,我相信用到同步的小伙伴都会遇到类似的问题。。。 代码块

    /**
     * 非json返回
     * @param  {[type]} interFace [description]
     * @param  {[type]} url       [description]
     * @param  {[type]} headers   [description]
     * @return {[type]}           [description]
     */
    sync_get_body: function(interFace,url,headers){
        var resData;
        var results = undefined;

        // 设置基本参数
        var options = {}

        // 判读是否设置header头
        if (headers != undefined){
            options['headers'] = headers;
        }

        // 异常包含
        try {
            // 请求过程、返回
            resData = request('GET',url,options);
            if (resData.statusCode == 200){
                results = ''+resData.getBody('utf8');
            }else{
                log.reqError(interFace,resData.statusCode,'GET request Status is not Fine!!');
            }
        } catch(e) {
            // 异常处理的地方
            log.reqPackageError(interFace,url,e.stack);
        }
        return results;
    },

从平台上看到任务完成,并且数据也是从服务器上下载的,一切都是正常的,就是不知道下载压缩包为何就是这个尿性。。。

7 回复

去除了各种超时设置,还是失败了。再做别的尝试…

    sync_get_body: function(interFace,url,headers){
        var resData;
        var results = undefined;

        // 设置基本参数
        var options = {}

        // 判读是否设置header头
        if (headers != undefined){
            options['headers'] = headers;
        }

        // 异常包含
        try {
            // 请求过程、返回
            resData = request('GET',url,options);
            if (resData.statusCode == 200){
                results = resData.getBody().toString();
            }else{
                log.reqError(interFace,resData.statusCode,'GET request Status is not Fine!!');
            }
        } catch(e) {
            // 异常处理的地方
            log.reqPackageError(interFace,url,e.stack);
        }
        return results;
    },

最后解决了。。原来下载之后不要转utf8,直接就是buff写入就好了。。。

        var resData;
        var results = undefined;

        // 设置基本参数
        var options = {}

        // 判读是否设置header头
        if (headers != undefined){
            options['headers'] = headers;
        }

        // 异常包含
        try {
            // 请求过程、返回
            resData = request('GET',url,options);
            if (resData.statusCode == 200){
                results = resData.getBody();
            }else{
                log.reqError(interFace,resData.statusCode,'GET request Status is not Fine!!');
            }
        } catch(e) {
            // 异常处理的地方
            log.reqPackageError(interFace,url,e.stack);
        }
        return results;

为什么要getBody('utf8')

…果然是这个原因

@SinalVee 因为获得数据的时候需要。。。

这是什么坑,,感觉思维短路了。。

@chengang4505 上传异常的坑。。

回到顶部