节点上传文件的流不完整

时间:2014-07-28 03:55:07

标签: node.js

当我尝试使用http.request编写方法并将fs.createReadStream()导入req时,文件已上传,但内容不完整

我的代码如下:

```
    var req = http.request(options, function(res) {

    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        if(chunk) {
            resData += chunk;
        }  
    });
    res.on('end', function() {
        callback(null, {
            statusCode: res.statusCode,
            headers: res.headers,
            data: resData
        });
    });
});
req.on('errer', function() {
    console.log('error');
});

// judge if the data params is a path string or raw data
if(data) {
    if(fs.existsSync(data)) {
        fs.createReadStream(data).pipe(req);
    } else {
        req.write(data);
    }
};
req.end();
```

在我放入的服务器中,我发现文件已上传但不完整。

2 个答案:

答案 0 :(得分:0)

将结束部分(在以`// judge``开头的评论之后)移到' end'监听器。

答案 1 :(得分:0)

根据此处发布的代码,您正在创建一个全局变量resData,当另一个请求发出时,它不会被重置。

您需要在回调函数中定义变量,以便您的函数如下所示:

    var req = http.request(options, function(res) {
    //Initialize resData here
    var resData = '';
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        if(chunk) {
            resData += chunk;
        }  
    });
    res.on('end', function() {
        callback(null, {
            statusCode: res.statusCode,
            headers: res.headers,
            data: resData
        });
    });
});
//I think you had a typo here
req.on('error', function() {
    console.log('error');
});