There are a number of reasons to use streaming:
It contains lots of prepackaged, already-tested functionality that is often the simplest and most reliable way to implement some data transfer feature.
Streaming does automatic flow-control and buffer management. This keeps memory management to a managed value, even when streaming large objects.
Streaming provides a standard interface that makes it easy to hook in other code (like transforms, other storage mediums, etc...).
There's a lot of error handling already built in.
Whether or not to use streaming is really a case-by-case basis. If you know streaming and you're just trying to send a file from point A to point B, I'd pretty much always use streaming unless there was some specific reason not to (some feature you're after that's harder to implement with streaming).
You don't show how your non-streaming code works so it's hard for us to compare a streaming option directly to code you haven't shown, but here's a guess at your specific questions:
what is the advantage of using socket.io-stream to upload file to server?
See the points above.
If the file size is small(~300kb), do I need to stream it?
"Need to stream it" depends upon a lot of things. At 300kb and no possibility of having thousands of these in flight at the same time, you probably don't "need" to stream. But I'd ask myself a question the other way around. Why not stream it? If you have ready-made code, why not use it?
Will streaming save memory of server?
It depends upon what implementation you're comparing it to, but because streaming has flow-control and manages buffering itself, it is often efficient with memory use.
If I upload some files (~8mb) through websocket using base64 encoding, will it impact the server in a bad way?
This depends entirely upon your implementation. I would not say that webSocket is particularly built to be optimized for file uploads. In most cases, I'd probably use the webSocket as a control channel and do large file uploads via the http server where uploads are a mature feature. For starters, base64 encoding is not particularly efficient for some types of data. Both http and webSocket support binary transfers which would generally be more efficient for file data.