nodejs tcp文件上传缺少的部分

时间:2014-05-03 03:39:21

标签: node.js file-upload

我正在尝试在localhost上创建一个服务器和客户端程序,以便能够从服务器上传和列出文件。我有代码将文件上传到服务器但由于某种原因,在服务器从客户端写入文件后,它的字节数比原始文件少。

以下是客户端代码:

var net = require('net');
var fs = require('fs');

var port='3000';
var host='localhost';
var path=__dirname;

var fileUploadDir = __dirname+'/uploadfolder/';

process.stdin.resume();
var socket = net.connect(port,host);

var stdin = process.stdin;
var stdout = process.stdout;
stdout.on('data', function(d){
    console.log("d: "+d);
});

socket.on('connect',function(){
    console.log("connected to server");
    //stdin.pipe(stdout);
    stdin.pipe(socket, {end: false});
});

socket.on('data', function(data){
    var b = new Buffer(data, "utf8");
    var bStr = b.toString();

    if(bStr=="okupload"){
        console.log("uploading file");
        folderFilesUpload(socket);
    }else{
        console.log(bStr);
    }
});

socket.on('end', function(){
    socket = net.connect(port,host);
    console.log('socket ended');
});

function folderFilesUpload(socket){
 fs.readdir(fileUploadDir, function(err, results){
        if(err)
            console.log("upload to upload files");
        else{
            if(results.length > 0){
                for(var r in results){
                    var fullPath = fileUploadDir+results[r];
                    var fileStream = fs.createReadStream(fullPath);
                    fileStream.on('open', function(){
                        fileStream.pipe(socket);
                    });
            }
        }else{
            console.log("no files to upload");
        }
    }
});
}

服务器代码:

var net=require('net');
var fs=require('fs');

var host ='localhost';
var port='3000';

var outputDir = __dirname+'/outputdir/';
var uploadState = false;

var server = net.createServer(function(conn){
    console.log('server connected');
    conn.on('data', function(data) {

        if(data == "l\n" && !uploadState){
            listFiles(conn);
        }

        if(data == "u\n"){
            console.log("switching to upload file state");
            uploadState=true;
            conn.write("okupload");
        }

        if(uploadState){
            console.log("data");
            //console.log("data: "+data);
            var file = fs.createWriteStream(outputDir+'temp');
            conn.pipe(file);
        }

    });
    conn.on('end', function(){
        uploadState = false;
        console.log('data has ended');
    });
});

server.listen(port,host, function(){
    server.on('connection', function(){
        console.log('connection made');
    });
});

function listFiles(conn){
    console.log("listing files");
    fs.readdir(outputDir, function(err, results){
        if(err){
            var b = new Buffer("error listing files", "utf8");
            conn.write(b);
        }else{
            var output = "files: \n";
            if(results !== null && results.length >0){
                for(var r in results){
                    output += results[r]+"\n";
                }
            }else{
                output += "no files.\n";
            }
            var b = new Buffer(output, "utf8");
            conn.write(b);
        }
    });  
}

0 个答案:

没有答案