An enhanced HTML 5 file input for Bootstrap 3.x with file preview for images and text, multiple selection, and more. This plugin is inspired by this blog article and Jasny's File Input plugin. The plugin enhances these concepts and simplifies the widget initialization with simple HTML markup on a file input. It also offers support for multiple file preview and previewing both images and text types.
NOTE: The latest version of the plugin v1.8.0 has been released. Refer the CHANGE LOG for details.
- The plugin will convert a simple HTML file input to an advanced file picker control. Will help fallback to a normal HTML file input for browsers not supporting JQuery or Javascript.
- The file input consists of the following three sections with options and templates to control the display:
- file caption section: to display a brief information of the file(s) selected
- file action buttons section: to browse, remove, and upload files.
- file preview section: to display the selected files on client for preview (supports images and text file types). Other file types will be displayed as normal thumbnails.
- The plugin automatically converts an input with
type = file
to an advanced file picker input if you set itsclass = file
. All options to the input can be passed as HTML5data
attributes. - Ability to select and preview multiple files. Uses HTML 5 File reader API to read and preview files. Displays the progress of files being being loaded onto the preview zone, in case many files are chosen.
- Offers predefined templates and CSS classes which can be changed to style your file-input display as per your needs.
- With v1.5.0, you can now configure the plugin to show an initial preview of images/files with initial caption
(more useful for record update scenarios). Refer the
initialPreview
andinitialCaption
properties in the plugin options section for configuring this. - Option to show/hide any or all of the following:
- caption section
- preview section
- upload button
- remove button
- Customise the location of the target container elements to display the entire plugin, the caption container, the caption text, the preview container, preview image, and preview status.
- For text file previews, autowrap the text to the thumbnail width, and show a wrap indicator link to display complete text on hover. You can customize the wrap indicator (which defaults to …).
- Customise the messages for preview, progress, and files selected.
- Upload action defaults to form submit. Supports an upload route/server action parameter for custom ajax based upload.
- Triggers JQuery events for advanced development. Events currently available are
filereset
andfileclear
. - Disabled and readonly file input support.
- Size of the entire plugin is about 5KB if gzipped. The minified assets are less than 12KB (about 10KB for the minified JS and 2KB for the minified CSS).
View the plugin documentation and plugin demos at Krajee JQuery plugins.
- Bootstrap 3.x
- Latest JQuery
- Most modern browsers supporting HTML5 file inputs and FileReader API including CSS3 & JQuery. For Internet Explorer, one must use IE versions 10 and above. IE9 and below will work as a normal file input, and will not support multiple file selection or the HTML 5 FileReader API.
The plugin supports only file input and preview at client level. It does not actually process the upload of the files to the server.
You can use the bower
package manager to install. Run:
bower install bootstrap-fileinput
You can use the composer
package manager to install. Either run:
$ php composer.phar require kartik-v/bootstrap-fileinput "dev-master"
or add:
"kartik-v/bootstrap-fileinput": "dev-master"
to your composer.json file
You can also manually install the plugin easily to your project. Just download the source ZIP or TAR ball and extract the plugin assets (css and js folders) into your project.
Step 1: Load the following assets in your header.
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css" rel="stylesheet">
<link href="path/to/css/fileinput.min.css" media="all" rel="stylesheet" type="text/css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="path/to/js/fileinput.min.js" type="text/javascript"></script>
If you noticed, you need to load the jquery.min.js
and bootstrap.min.css
in addition to the fileinput.min.css
and fileinput.min.js
.
Step 2: Initialize the plugin on your page. For example,
// initialize with defaults
$("#input-id").fileinput();
// with plugin options
$("#input-id").fileinput({'showUpload':false, 'previewFileType':'any'});
The #input-id
is the identifier for the input (e.g. type = file
) on your page, which is hidden automatically by the plugin.
Alternatively, you can directly call the plugin options by setting data attributes to your input field.
<input id="input-id" type="file" class="file" data-preview-file-type="text" >
The plugin supports these following options:
boolean whether to display the file caption. Defaults to true
.
boolean whether to display the file preview. Defaults to true
.
boolean whether to display the file remove/clear button. Defaults to true
.
boolean whether to display the file upload button. Defaults to true
. This will default to a form submit button, unless the uploadUrl is specified.
string any additional CSS class to append to the caption container.
string any additional CSS class to append to the preview container.
string any additional CSS class to append to the main plugin container.
string the template used to render the widget. The following template variables will be parsed:
{class}
: the CSS class as set in themainClass
property.{preview}
: the content parsed by thepreviewTemplate
and will be displayed only ifshowPreview
istrue
.{caption}
: the content parsed by thecaptionTemplate
and will be displayed only ifshowCaption
istrue
.{remove}
: the file remove/clear button and will be displayed only ifshowRemove
istrue
.{upload}
: the file upload button and will be displayed only ifshowUpload
istrue
.{browse}
: the main file browse button to select your files for input.
The mainTemplate
if not passed, will be automatically set based on showCaption
settings.
- If
showCaption
is set totrue
, themainTemplate
will default to:
{preview}
<div class="input-group {class}">
{caption}
<div class="input-group-btn">
{remove}
{upload}
{browse}
</div>
</div>
- If
showCaption
is set tofalse
, themainTemplate
will default to:
{preview}\n{remove}\n{upload}\n{browse}\n
string | array the initial preview content to be displayed. You can pass the minimal HTML markup for displaying your image, text, or file. If set as a string, this will display a single file in the initial preview. If set as an array, it will display all files in the array as an initial preview (useful for multiple file upload scenarios).
The following CSS classes will need to be added for displaying each file type as per the plugin style theme:
- image files: Include CSS class
file-preview-image
- text files: Include CSS class
file-preview-text
- other files: Include CSS class
file-preview-other
Examples of how you can setup various files for initial preview:
// for image files
initialPreview: [
"<img src='/images/desert.jpg' class='file-preview-image' alt='Desert' title='Desert'>",
"<img src='/images/jellyfish.jpg' class='file-preview-image' alt='Jelly Fish' title='Jelly Fish'>",
],
// for text files
initialPreview: "<div class='file-preview-text' title='NOTES.txt'>" +
"This is the sample text file content upto wrapTextLength of 250 characters" +
"<span class='wrap-indicator' onclick='$(\"#show-detailed-text\").modal(\"show\")' title='NOTES.txt'>[…]</span>" +
"</div>"
// for other files
initialPreview: "<div class='file-preview-text'>" +
"<h2><i class='glyphicon glyphicon-file'></i></h2>" +
"Filename.xlsx" + "</div>"
string the initial preview caption text to be displayed. If you do not set a value here and initialPreview
is set to
true
this will default to "{preview-file-count} files selected"
, where {preview-file-count}
is the count of the
files passed in initialPreview
.
boolean whether you wish to overwrite the initial preview content and caption setup. This defaults to true
, whereby, any initialPreview
content set
will be overwritten, when new file is uploaded or when files are cleared. Setting it to false
will help displaying a saved image or file from database always -
useful especially when using the multiple
file upload feature.
string the template used to render the caption. The following template variables will be parsed:
{class}
: the CSS class as set in thecaptionClass
property.
The captionTemplate
if not set will default to:
<div class="form-control file-caption {class}">
<span class="glyphicon glyphicon-file"></span> <span class="file-caption-name"></span>
</div>
string the template used to render the preview. The following template variables will be parsed:
{class}
: the CSS class as set in thepreviewClass
property.
The previewTemplate
if not set will default to:
<div class="file-preview {class}">
<div class="file-preview-status text-center text-success"></div>
<div class="close fileinput-remove text-right">×</div>
<div class="file-preview-thumbnails"></div>
<div class="clearfix"></div> +
</div>
string the label to display for the file picker/browse button. Defaults to Browse …
.
string the icon to display before the label for the file picker/browse button. Defaults to <i class="glyphicon glyphicon-folder-open"></i>
.
string the CSS class for the file picker/browse button. Defaults to btn btn-primary
.
string the label to display for the file remove button. Defaults to Remove
.
string the icon to display before the label for the file picker/remove button. Defaults to <i class="glyphicon glyphicon-ban-circle"></i>
.
string the CSS class for the file remove button. Defaults to btn btn-default
.
string the label to display for the file upload button. Defaults to Upload
.
string the icon to display before the label for the file upload button. Defaults to <i class="glyphicon glyphicon-upload"></i>
.
string the CSS class for the file upload button. Defaults to btn btn-default
.
string the URL for the upload processing action (typically for ajax based processing). Defaults to null
. If this is not set or null
, then the upload button action will default to form submission.
string the message displayed when the files are getting read and loaded for preview. Defaults to Loading …
.
string the progress message displayed as each file is loaded for preview. Defaults to Loaded {percent}% of {file}
. The following variables will be replaced:
{percent}
: the percentage of file read and loaded.{file}
: the name of the file being loaded.
string the progress message displayed in caption window when multiple (more than one) files are selected. Defaults to {n} files selected
. The following variables will be replaced:
{n}
: the number of files selected.
string the type of files that are to be displayed in the preview window. Defaults to image
. Can be one of the following:
image
: Onlyimage
type files will be shown in preview.text
: Onlytext
type files will be shown in preview.any
: Bothimage
andtext
files content will be shown in preview.
Files other than image
or text
will be displayed as a thumbnail with the filename in the preview window.
integer the number of characters after which the content will be stripped/wrapped for text preview. Defaults to 250
.
string the type of files that are to be displayed in the preview window. Defaults to <span class="wrap-indicator" title="{title}">[…]</span>
. The following variables will be replaced:
{title}
: the content of the entire text file that will be displayed as a span title element.
string the identifier for the container element containing the caption (e.g. '#id'
). If not set, will default to the container with CSS class file-caption
inside the main plugin container.
string the identifier for the container element containing the caption text (e.g. '#id'
). If not set, will default to the container with CSS class file-caption-name
inside the main plugin container.
string the identifier for the container element containing the preview (e.g. '#id'
). If not set, will default to the container with CSS class file-preview
inside the main plugin container.
string the identifier for the element containing the preview image thumbnails (e.g. '#id'
). If not set, will default to the container with CSS class file-preview-thumbnails
inside the main plugin container.
string the identifier for the element containing the preview progress status (e.g. '#id'
). If not set, will default to the container with CSS class file-preview-status
inside the main plugin container.
The plugin supports these events:
This event is triggered when the file input is cleared with the remove button.
Example:
$('#input-id').on('fileclear', function(event) {
console.log("fileclear");
});
This event is triggered when the file input is reset to initial value.
Example:
$('#input-id').on('filereset', function(event) {
console.log("filereset");
});
The plugin supports these methods:
Reset the file input.
$('#input-id').fileinput('reset');
Clear the file input.
$('#input-id').fileinput('clear');
Refreshes the file input plugin based on options provided. You can supply an array of plugin options as a parameter.
// example 1 (disable at runtime)
$('#input-id').attr('disabled', 'disabled');
$('#input-id').fileinput('refresh');
// example 2 (modify plugin options at runtime)
$('#input-id').fileinput('refresh', {browseLabel: 'Select...', removeLabel: 'Delete'});
bootstrap-fileinput is released under the BSD 3-Clause License. See the bundled LICENSE.md
for details.