socket.io-stream icon indicating copy to clipboard operation
socket.io-stream copied to clipboard

Send a file from server

Open khurramraheel opened this issue 9 years ago • 6 comments
trafficstars

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 );

khurramraheel avatar May 25 '16 04:05 khurramraheel

It also is not clear how to receive the file on browser.

pietrovismara avatar Jun 12 '16 13:06 pietrovismara

How to read stream at server side and create file from that stream?

niralmunjariya avatar Jul 04 '16 11:07 niralmunjariya

@niralmunjariya

ss.on('file', (stream, data) => { 
  var output = fs.createWriteStream(_path);
  stream.pipe(output);
 });

pietrovismara avatar Jul 04 '16 11:07 pietrovismara

@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.

niralmunjariya avatar Jul 04 '16 11:07 niralmunjariya

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);
});

`

mmmmoj avatar Oct 11 '16 07:10 mmmmoj

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.

hammadali6096 avatar Dec 23 '20 15:12 hammadali6096