Convert Figma logo to code with AI

FineUploader logofine-uploader

Multiple file upload plugin with image previews, drag and drop, progress bars. S3 and Azure support, image scaling, form support, chunking, resume, pause, and tons of other features.

8,187
1,872
8,187
122

Top Related Projects

File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.

28,920

The next open source file uploader for web browsers :dog:

18,054

Dropzone is an easy to use drag'n'drop library. It supports image previews and shows nice progress bars.

2,959

A JavaScript library providing multiple simultaneous, stable, fault-tolerant and resumable/restartable file uploads via the HTML5 File API.

A JavaScript library for providing multiple simultaneous, stable, fault-tolerant and resumable/restartable uploads via the HTML5 File API.

An enhanced HTML 5 file input for Bootstrap 5.x/4.x./3.x with file preview, multiple selection, and more features.

Quick Overview

Fine Uploader is a JavaScript library that provides a complete solution for file uploading. It offers a highly customizable, feature-rich uploader with support for multiple file selection, drag and drop, progress bars, and various UI options. Fine Uploader works across different browsers and devices, making it a versatile choice for web applications.

Pros

  • Extensive feature set, including chunked uploads, resume capability, and image scaling
  • Cross-browser compatibility and mobile support
  • Highly customizable with various UI options and themes
  • Robust error handling and retry mechanisms

Cons

  • Learning curve can be steep due to the extensive API and configuration options
  • Large file size compared to simpler upload libraries
  • Some users report occasional compatibility issues with certain server-side implementations
  • Limited official documentation for newer versions

Code Examples

  1. Basic initialization:
const uploader = new qq.FineUploader({
    element: document.getElementById('uploader'),
    request: {
        endpoint: '/server/upload'
    }
});
  1. Customizing the UI:
const uploader = new qq.FineUploader({
    element: document.getElementById('uploader'),
    template: 'qq-template-gallery',
    request: {
        endpoint: '/server/upload'
    },
    thumbnails: {
        placeholders: {
            waitingPath: '/path/to/waiting-generic.png',
            notAvailablePath: '/path/to/not_available-generic.png'
        }
    },
    validation: {
        allowedExtensions: ['jpg', 'jpeg', 'png', 'gif']
    }
});
  1. Handling events:
const uploader = new qq.FineUploader({
    element: document.getElementById('uploader'),
    request: {
        endpoint: '/server/upload'
    },
    callbacks: {
        onComplete: function(id, name, responseJSON, xhr) {
            console.log('Upload completed for file: ' + name);
        },
        onError: function(id, name, errorReason, xhr) {
            console.error('Upload failed for file: ' + name + '. Reason: ' + errorReason);
        }
    }
});

Getting Started

  1. Include Fine Uploader in your project:
<script src="https://cdnjs.cloudflare.com/ajax/libs/fine-uploader/5.16.2/fine-uploader.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/fine-uploader/5.16.2/fine-uploader.min.css" rel="stylesheet">
  1. Create a container element in your HTML:
<div id="uploader"></div>
  1. Initialize Fine Uploader in your JavaScript:
const uploader = new qq.FineUploader({
    element: document.getElementById('uploader'),
    request: {
        endpoint: '/server/upload'
    },
    debug: true
});
  1. Implement server-side handling for the uploaded files at the specified endpoint.

Competitor Comparisons

File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.

Pros of jQuery-File-Upload

  • Lightweight and easy to integrate with existing jQuery projects
  • Extensive browser support, including older versions
  • Built-in image resizing and orientation correction

Cons of jQuery-File-Upload

  • Dependency on jQuery library
  • Less comprehensive documentation compared to Fine Uploader
  • Fewer advanced features out of the box

Code Comparison

jQuery-File-Upload:

$('#fileupload').fileupload({
    url: '/upload',
    dataType: 'json',
    done: function (e, data) {
        $.each(data.result.files, function (index, file) {
            $('<p/>').text(file.name).appendTo(document.body);
        });
    }
});

Fine Uploader:

var uploader = new qq.FineUploader({
    element: document.getElementById('fine-uploader'),
    request: {
        endpoint: '/upload'
    },
    callbacks: {
        onComplete: function(id, name, responseJSON) {
            console.log('File uploaded: ' + name);
        }
    }
});

Both libraries offer easy-to-use file upload functionality, but Fine Uploader provides a more feature-rich and customizable solution without jQuery dependency. jQuery-File-Upload is simpler and integrates well with existing jQuery projects, while Fine Uploader offers more advanced features and better documentation.

28,920

The next open source file uploader for web browsers :dog:

Pros of Uppy

  • Modern, modular architecture with a plugin system for easy extensibility
  • Built-in support for various cloud storage services and image editing
  • Responsive UI with a sleek, customizable interface

Cons of Uppy

  • Larger bundle size compared to Fine Uploader
  • Steeper learning curve for developers due to its extensive API
  • Relatively newer project with potentially fewer community resources

Code Comparison

Fine Uploader:

var uploader = new qq.FineUploader({
    element: document.getElementById('uploader'),
    request: {
        endpoint: '/uploads'
    }
});

Uppy:

const uppy = Uppy.Core()
  .use(Uppy.Dashboard, { inline: true, target: '#uploader' })
  .use(Uppy.XHRUpload, { endpoint: '/uploads' })

uppy.on('complete', (result) => {
  console.log('Upload complete! We've uploaded these files:', result.successful)
})

Both libraries offer easy setup, but Uppy's modular approach allows for more flexibility in configuring plugins and features. Fine Uploader's setup is more straightforward, while Uppy provides a more comprehensive API for advanced use cases.

18,054

Dropzone is an easy to use drag'n'drop library. It supports image previews and shows nice progress bars.

Pros of Dropzone

  • Lightweight and easy to set up with minimal configuration
  • Highly customizable appearance through CSS
  • Active development and frequent updates

Cons of Dropzone

  • Less comprehensive feature set compared to Fine Uploader
  • Limited built-in UI components for advanced use cases

Code Comparison

Fine Uploader:

var uploader = new qq.FineUploader({
    element: document.getElementById('fine-uploader'),
    request: {
        endpoint: '/uploads'
    }
});

Dropzone:

Dropzone.options.myDropzone = {
    url: "/uploads",
    paramName: "file",
    maxFilesize: 2
};

Both Fine Uploader and Dropzone are popular JavaScript libraries for handling file uploads. Fine Uploader offers a more comprehensive set of features and advanced customization options, making it suitable for complex upload scenarios. It provides robust error handling, resume functionality, and extensive documentation.

Dropzone, on the other hand, focuses on simplicity and ease of use. It has a smaller footprint and requires less configuration to get started. Dropzone's drag-and-drop interface is intuitive and visually appealing out of the box.

While Fine Uploader excels in handling large-scale, enterprise-level upload requirements, Dropzone is often preferred for simpler projects or when a lightweight solution is needed. The choice between the two depends on the specific needs of the project and the desired level of customization and control over the upload process.

2,959

A JavaScript library providing multiple simultaneous, stable, fault-tolerant and resumable/restartable file uploads via the HTML5 File API.

Pros of flow.js

  • Lightweight and focused on chunk uploading functionality
  • Easier to integrate with various front-end frameworks
  • More flexible and customizable for advanced use cases

Cons of flow.js

  • Less comprehensive out-of-the-box features compared to Fine Uploader
  • Requires more manual configuration for advanced functionality
  • Smaller community and fewer resources available

Code Comparison

fine-uploader:

var uploader = new qq.FineUploader({
    element: document.getElementById('uploader'),
    request: {
        endpoint: '/uploads'
    }
});

flow.js:

var flow = new Flow({
    target: '/uploads',
    chunkSize: 1024 * 1024
});
flow.assignBrowse(document.getElementById('uploader'));

Both libraries provide easy-to-use APIs for file uploading, but flow.js focuses more on chunk uploading and provides a more barebones approach, while Fine Uploader offers a more comprehensive solution with additional features out of the box. Fine Uploader has a larger community and more extensive documentation, making it easier for beginners to get started. However, flow.js's lightweight nature and flexibility make it a good choice for developers who need more control over the upload process and want to integrate it with other frameworks or libraries.

A JavaScript library for providing multiple simultaneous, stable, fault-tolerant and resumable/restartable uploads via the HTML5 File API.

Pros of resumable.js

  • Lightweight and focused solely on chunked, resumable file uploads
  • Simple API and easy integration with various backend technologies
  • Active development and community support

Cons of resumable.js

  • Less feature-rich compared to fine-uploader
  • Limited UI components and customization options out-of-the-box
  • Fewer built-in validation and file type handling capabilities

Code Comparison

resumable.js:

var r = new Resumable({
  target: '/upload',
  chunkSize: 1*1024*1024,
  simultaneousUploads: 4,
  testChunks: true,
  throttleProgressCallbacks: 1
});

fine-uploader:

var uploader = new qq.FineUploader({
  element: document.getElementById('fine-uploader'),
  request: {
    endpoint: '/upload'
  },
  chunking: {
    enabled: true,
    partSize: 1000000
  }
});

Both libraries offer chunked uploading capabilities, but fine-uploader provides a more comprehensive set of options and features out-of-the-box. resumable.js focuses on simplicity and core functionality, while fine-uploader offers a wider range of customization options and built-in UI components. The choice between the two depends on the specific requirements of your project and the level of control and features you need for file uploads.

An enhanced HTML 5 file input for Bootstrap 5.x/4.x./3.x with file preview, multiple selection, and more features.

Pros of bootstrap-fileinput

  • Lightweight and easy to integrate with Bootstrap-based projects
  • Extensive customization options for UI elements
  • Built-in support for multiple languages and RTL layouts

Cons of bootstrap-fileinput

  • Less robust handling of large file uploads compared to fine-uploader
  • Fewer advanced features like chunked uploading or auto-retry on failure
  • Limited cross-browser compatibility for older versions of Internet Explorer

Code Comparison

bootstrap-fileinput:

$("#input-id").fileinput({
    uploadUrl: "/file-upload-batch/2",
    allowedFileExtensions: ['jpg', 'png', 'gif'],
    maxFileSize: 5000,
    maxFilesNum: 10,
});

fine-uploader:

var uploader = new qq.FineUploader({
    element: document.getElementById("uploader"),
    request: {
        endpoint: '/uploads'
    },
    validation: {
        allowedExtensions: ['jpg', 'jpeg', 'png', 'gif']
    }
});

Both libraries offer easy-to-use initialization and configuration options. fine-uploader provides more granular control over the upload process, while bootstrap-fileinput focuses on seamless integration with Bootstrap-based projects. The choice between the two depends on specific project requirements and the desired level of customization and control over the file upload process.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Fine Uploader is no longer maintained and the project has been effectively shut down. For more info, see https://github.com/FineUploader/fine-uploader/issues/2073.

Build Status npm CDNJS license Twitter URL

Documentation | Examples | Support | Blog | Changelog


Fine Uploader is:

  • Cross-browser
  • Dependency-free
  • 100% JavaScript
  • 100% Free Open Source Software

FineUploader is also simple to use. In the simplest case, you only need to include one JavaScript file. There are absolutely no other required external dependencies. For more information, please see the documentation.

Contributing

If you'd like to help and keep this project strong and relevant, you have several options.

Help us pay the bills

Fine Uploader is currently looking for a sponsor to pay the AWS bills (which have recently lapsed). These add up to about $40/month. Please open an issue if you are interesting in becoming a sponsor. We will happily list you as sponsor on the site and README.

File a bug report

If you see something that isn't quite right, whether it be in the code, or on the docs site, or even on FineUploader.com (which is hosted on GitHub), please file a bug report. Be sure to make sure the bug hasn't already been filed by someone else. If it has, feel free to upvote the issue and/or add your comments.

Join the team

Are you interested in working on a very popular JavaScript-based file upload library with countless users? If you're strong in JavaScript, HTML, and CSS, and have a desire to help push the FOSS movement forward, let us know! The project can always use more experts.

Help spread the word

Are you using Fine Uploader in your library or project? If so, let us know and we may add a link to your project or application and your logo to FineUploader.com. If you care to write an article about Fine Uploader, we would be open to reading and publicizing it through our site, blog, or Twitter feed.

Develop an integration library

Are you using Fine Uploader inside of a larger framework (such as React, Angular2, Ember.js, etc)? If so, perhaps you've already written a library that wraps Fine Uploader and makes it simple to use Fine Uploader in this context. Let us know and it may make sense to either link to your library, or even move it into the FineUploader GitHub organization (with your approval, of course). We'd also love to see libraries that make it simple to pair Fine Uploader with other useful libraries, such as image editors and rich text editors.

Contribute code

The best way to contribute code is to open up a pull request that addresses one of the open feature requests or bugs. In order to get started developing Fine Uploader, read this entire section to get the project up and running on your local development machine. This section describes how you can build and test Fine Uploader locally. You may use these instructions to build a copy for yourself, or to contribute changes back to the library.

Setup

You must have Node.js instaled locally (any version should be fine), and you must have Unix-like environment to work with. Linux, FreeBSD/OS X, Cygwin, and Windows 10 bash all should be acceptable environments. Please open up a new issue if you have trouble building. The build process is centered around a single Makefile, so GNU Make is required as well (though most if not all Unix-like OSes should already have this installed). Finally, you will need a git client.

To pull down the project & build dependencies:

  1. Download the project repository: git clone https://github.com/FineUploader/fine-uploader.git.
  2. Install all project development dependencies: npm install.

Generating build artifacts

  • To build all build artifacts for all endpoint types: make build. You can speed this process up a bit by using the parallel recipes feature of Make: make build -j. If you would like to build only a specific endpoint type, see the Makefile for the appropriate recipe. The build output will be created in the _build directory.
  • To build zip files for all endpoint types: make zip. To build a zip for only a specific endpoint type, see the Makefile for the appropriate recipe. The zip files will be included alongside the build output in the _build directory.
  • To rev the version number: make rev-version target=NEW_VERSION, where NEW_VERSION is the semver-compatible target version identifier.

Running tests

To build, run the tests & linter: npm test (you'll need Firefox installed locally).

Commiting new code and changes

NPM DownloadsLast 30 Days