Skip to content

Instantly share code, notes, and snippets.

@marekjelen
Created May 3, 2011 21:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save marekjelen/954248 to your computer and use it in GitHub Desktop.
Save marekjelen/954248 to your computer and use it in GitHub Desktop.
Pretty simple file server on Node.js
var fs = require("fs");
var net = require("net");
var basePath = "/Users/marek/test";
var server = net.createServer(function(client) {
var buffer = "";
var stream = null;
var size = 0;
var streamed = 0;
client.addListener("data", function(data) {
if (stream != null) {
stream.write(data);
streamed += data.length;
if (size <= streamed) {
stream.destroySoon();
client.destroySoon();
}
return;
}
buffer += data.toString("ascii");
var pos = buffer.indexOf("\n");
if (pos > -1) {
var header = buffer.substr(0, pos - 1).split(":");
buffer = buffer.substr(pos + 1);
if (header[0] == "GET") {
path = basePath + header[1]
fs.stat(path, function(err, stat) {
size = stat.size;
if(header[2] == null) header[2] = 0;
if(header[3] == null) header[3] = size;
var stream = fs.createReadStream(path, {start: header[2], end: header[3]});
stream.addListener("data", function(data) {
client.write(data);
streamed += data.length;
if(streamed == size){
client.destroySoon();
}
});
});
} else if (header[0] == "PUT") {
size = parseInt(header[2]);
stream = fs.createWriteStream(basePath + header[1]);
stream.write(buffer);
streamed += buffer.length;
buffer = null;
}
}
});
});
server.listen(8124, "0.0.0.0");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment