fine-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.
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.
The next open source file uploader for web browsers :dog:
Dropzone is an easy to use drag'n'drop library. It supports image previews and shows nice progress bars.
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
- Basic initialization:
const uploader = new qq.FineUploader({
element: document.getElementById('uploader'),
request: {
endpoint: '/server/upload'
}
});
- 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']
}
});
- 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
- 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">
- Create a container element in your HTML:
<div id="uploader"></div>
- Initialize Fine Uploader in your JavaScript:
const uploader = new qq.FineUploader({
element: document.getElementById('uploader'),
request: {
endpoint: '/server/upload'
},
debug: true
});
- 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.
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.
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.
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 designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
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.
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:
- Download the project repository:
git clone https://github.com/FineUploader/fine-uploader.git
. - 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
, whereNEW_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
- Follow the Angular.js commit guidelines.
- Follow the Git Flow branching strategy.
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.
The next open source file uploader for web browsers :dog:
Dropzone is an easy to use drag'n'drop library. It supports image previews and shows nice progress bars.
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.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot