GithubHelp home page GithubHelp logo

deepaksuthar40128 / loadstream Goto Github PK

View Code? Open in Web Editor NEW
3.0 1.0 2.0 35 KB

Load Stream is a versatile package that facilitates the uploading of large files to a server in chunks based on websocket and http short polling

Home Page: https://www.npmjs.com/package/load-stream

JavaScript 53.67% TypeScript 46.33%
chunks file-upload npm-package typescript websocket

loadstream's Introduction

Load Stream

npm version License

Description

Load Stream is a versatile package that facilitates the uploading of large files to a server in chunks. The package provides both server-side (load-stream) and client-side (loadstream-client) components. It utilizes HTTP short polling to break files into chunks and send them to the server, providing multiple listeners for events like progress, completion, and errors.

Features

  • Efficient file uploading with chunking
  • HTTP short polling for improved performance
  • Multiple event listeners: onprogress, onload, onerror
  • Methods for stopping and resuming uploads

Installation

Server-Side (load-stream)

Install the package using npm:

npm install load-stream

Integrate it into your server with Express:

const loadStream = require('load-stream');
const express = require('express');
const app = express();

/* cb function to provide and modify the fileName and destination(where to save file)
  this cb function expect an argument which contains file information and current uploading directory.
Example:
  file-> {
    fileName:'hello.png',
    fileSize:1242,
    destination:'/' //default destination
  }
*/
const cb = (file) => {
    return {
        fileName: Date.now() + file.fileName,
        destination: '/public/uploads'
    }
}
//creating instance of loadStream
let loader = new loadStream(cb);

//use this loadStream instance as middleware to handle and make http requests
app.use(loader.load());
//on Error 
loader.onerror = (e) => {
    console.log(e);
}

Client-Side (CDN)

You can include the client-side library via CDN in your HTML file:

<script src="/loadStream/loadStream.js"></script>
<script>
  /*
    options = {
     chunksize: 1024 * 1024, // default 1024*1024 (in bytes)
     method: 'http' or 'websocket' // ['websocket','http'] -> fallback from websocket to http
    }
  */
  let options = {
    chunksize: 1024
  }
  let loader = new LoadStream(options); //options argument is optional fallback to default options

  const uploadFile = (file)=>{
      loader.upload(file);
  }

  loader.onprogress = (event) => {
      console.log(event.progress);// progress Example: to use in progress bar
      console.log(event.time); // Expected time remains in uploading file (in seconds)
      console.log(event.speed);// Uploading speed (in bytes/sec)
  }

  loader.onload = () => {
    console.log("Completed");
  }

  loader.onerror = (event) => {
    console.log(event.error);
  }
  
  const resumeUpload = ()=>{
    loader.resume(); // returns true if resumed else false
  }

  const pauseUpload = ()=>{
    loader.stop();// returns true if paused else false
  }
</script>

Client-Side (loadstream-client)

To include client side script in React.Js/Next.Js etc

npm install loadstream-client

Integrate it into your client side:

import loadStream from 'loadstream-client'
/*
  const url='http://localhost:5000'; // url is server's host url 
*/
let loader = new loadStream({ url }) // url is required*

	const uploadFile = async (file) => {
          try {
                       loader.upload(file);

		       loader.onprogress = (event) => {
		            console.log(event.progress);// progress Example: to use in progress bar
		            console.log(event.time); // Expected time remains in uploading file (in seconds)
		            console.log(event.speed);// Uploading speed (in bytes/sec)
		        }
		      
		        loader.onload = () => {
		          console.log("Completed");
		        }
		      
		        loader.onerror = (event) => {
		          console.log(event.error);
		        }
		        
		        const resumeUpload = ()=>{
		          loader.resume(); // returns true if resumed else false
		        }
		      
		        const pauseUpload = ()=>{
		          loader.stop();// returns true if paused else false
		        }

		} catch (error) {
			console.error("Upload error:", error);
		}

Contributing

We welcome contributions! Your contribution means to us.

License

This project is licensed under the MIT License - see the LICENSE file for details.

loadstream's People

Contributors

deepaksuthar40128 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.