socket.io-stream
socket.io-stream copied to clipboard
Send a file from server
I wonder how should I use to simply send a file from server to browser.
var newStream = fs.createReadStream(url); ss(socket).emit('itemSent', newStream );
It also is not clear how to receive the file on browser.
How to read stream at server side and create file from that stream?
@niralmunjariya
ss.on('file', (stream, data) => {
var output = fs.createWriteStream(_path);
stream.pipe(output);
});
@pietrovismara
Thanks for your quick reply.
Below is my socket listener event on the server side.
ss(socket).on("file:add:stream", function (stream, data) {
stream.on('finish', function () {
console.log('file has been written');
});
var dataStream = fs.createWriteStream(data.name);
stream.pipe(dataStream);
ss(socket).emit('file:add:stream:success');
});
Below is my client side code.
var stream = ss.createStream();
ss.createBlobReadStream(data.files[0].buffer).pipe(stream);
var blobStream = ss.createBlobReadStream(data.files[0].buffer);
var size = 0;
blobStream.on('data', function(chunk) {
size += chunk.length;
console.log(Math.floor(size / data.files[0].metadata.size * 100) + '%');
// -> e.g. '42%'
});
blobStream.pipe(stream);
ss(socket).emit('file:add:stream', stream, data.files[0].metadata);
ss(socket).on('file:add:stream:success', function(data){
console.info('file uploaded to server');
console.log(data);
});
It writes the file to the root directory of my server. But when i try to open the file, it shows that the file has some format problem. Could you please help me out with it ? Thanks.
your code should be like below ` var stream = ss.createStream(); var blobStream = ss.createBlobReadStream(data.files[0].buffer); var size = 0; blobStream.on('data', function (chunk) { size += chunk.length; console.log(Math.floor(size / data.files[0].metadata.size * 100) + '%'); } );
blobStream.pipe(stream);
ss(socket).emit('file:add:stream', stream, data.files[0].metadata);
ss(socket).on('file:add:stream:success', function (data) {
console.info('file uploaded to server');
console.log(data);
});
`
How to read stream at server side and create file from that stream?
ss(socket).on('file', function (stream, data) { var filename = data.filename; console.log("File_Name : " + filename); stream.pipe(fs.createWriteStream(filename, 'utf8')); });
Its work for me.