https下载文件sync-request新坑 - CNode技术社区

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

用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 上传异常的坑。。

回到顶部

AltStyle によって変換されたページ (->オリジナル) /