File Input

Custom File Input 自定义文件框

更高级控件的可以使用: dropzone.js

<input type="file" name="myfile" id="my-file-input" />

$('#my-file-input').ace_file_input();

Options 参数

Style 默认 false ,

no_file :没有文件选择时,显示的文字

no_icon :无文件选择时,显示的图标 、

btn_choose:没有选择文件的按钮样式

btn_change :选择后,更改按钮

icon_remove : 移除选择的文件

droppable :默认false, ture则为启用拖放

thumbnail:缩略图大小small, large or fit.

allowExt:选择文件类型允许的列表(白名单)

denyExt:选择文件类型不允许的列表(黑名单)

allowMime 白名单

denyMime 黑名单

maxSize 文件大小

Callbacks 回调函数

before_change

$('#my-file-input').ace_file_input({

...

,

before_change: function(files, dropped) {

//files is a "File" object array in modern browsers

//files is a "string" (file name) array in older browsers

//dropped=true if files are drag & dropped

var valid_files = []

for(var i = 0; i < files.length; i++) {

var file = files[i];

if( typeof file === 'string') {

/older browsers that don't support FileReader API, such as IE

//here, file is just a filename string

//if (file is valid) valid_files.push(file);

} else if( 'File' in window && file instanceof window.File ) {

//file is a "File" object with following properties

//file.name

//file.type (mime type)

//file.size

//if (file is valid) valid_files.push(file);

}

}

return valid_files;

//or

return true;//original input files

//or

return false;//all are invalid, but don't reset input

//or

return -1;//all are invalid, reset input

}

before_remove

$('#my-file-input').ace_file_input({

...

,

before_remove : function() {

if( uploadInProgress) return false;//don't allow resetting

return true;

}

});

preview_error

$('#my-file-input').ace_file_input({

...,

preview_error : function(filename, error_code) {

//filename = name of the file that had a problem

switch(error_code) {

case 1:

//FILE_LOAD_FAILED

break;

case 2:

//IMAGE_LOAD_FAILED

break;

case 3:

//THUMBNAIL_FAILED

break;

}

}

});

File Filtering 文件过滤

allowExt

denyExt

allowMime

denyMime

maxSize

before_change

Functions

show_file_list

$('#my-input').ace_file_input('show_file_list', ['file1.txt']);

$('#my-input').ace_file_input('show_file_list', [

{type: 'image', name: 'name of image', path: 'http://path/to/image/for/preview'},

{type: 'file', name: 'hello.txt'}

]);

//type can be 'image', 'video', 'audio', 'file'

update_settings

$('#my-input').ace_file_input('update_settings', {

allowExt: ['pdf', 'doc', 'docx']

});

files

var files = $('#my-input').ace_file_input('files');

//is similar to:

var files = $('#my-input').data('ace_input_files');

method

var method = $('#my-input').ace_file_input('method');

//is similar to:

var method = $('#my-input').data('ace_input_method');

disable

$('#my-input').ace_file_input('disable');

enable

$('#my-input').ace_file_input('enable');

enable_reset

$('#my-input').ace_file_input('enable_reset', false);

$('#my-input').ace_file_input('enable_reset', true);

reset_input

$('#my-input').ace_file_input('reset_input');

reset_input_ui

$('#my-input').ace_file_input('reset_input_ui');

$('#my-form').on('reset', function(e) {

$('#my-input').ace_file_input('reset_input_ui');

});

reset_input_field

loading

$('#my-input').ace_file_input('loading' , true);//adds overlay

$('#my-input').ace_file_input('loading' , false);//removes overlay

$('#my-input').ace_file_input('loading' , ' custom content inside overlay such as a progressbar ');

Events

$('#my-file-input').ace_file_input({

droppable: true

}) .on('change', function() {

var files = $(this).data('ace_input_files');

var method = $(this).data('ace_input_method');

});

Uploading

启用 拖动 文件时候,应对上传文件校验

var files = $('#my-file-input').data('ace_input_files');

var myform = $('#myform');

var fd = new FormData(myform.get(0));//populate FormData with myform data

var myform = $('#myform');

var fd = new FormData();//empty FormData object

$.each(myform.serializeArray(), function(i, item) {

//add form fields one by one to our FormData

fd.append(item.name, item.value);

});

myform.find('input[type=file]').each(function(){

var field_name = $(this).attr('name');

//for fields with "multiple" file support

//field name should be something like myfile[]

var files = $(this).data('ace_input_files');

if(files && files.length > 0) {

for(var f = 0; f < files.length; f++) {

fd.append(field_name, files[f]);

}

}

});

var deferred = $.ajax({

url: myform.attr('action'),

type: myform.attr('method'),

processData: false,//important

contentType: false,//important

dataType: 'json',//depending on your server side response

data: fd//our FormData object

})

Ajax 提交 from数据

deferred.done(function(result) {

//on success (successful response from server)

}).fail(function(result) {

//unable to receive a valid response from server

});

低版本浏览器

var deferred = new $.Deferred //create a custom deferred object, because there's no ajax here to create it for us

var temporary_iframe_id = 'temporary-iframe-'+(new Date()).getTime()+'-'+(parseInt(Math.random()*1000));

var temp_iframe =

$('<iframe id="'+temporary_iframe_id+'" name="'+temporary_iframe_id+'" \

frameborder="0" width="0" height="0" src="about:blank"\

style="position:absolute; z-index:-1; visibility: hidden;" />')

.insertAfter(myform)

myform.append('<input type="hidden" name="temporary-iframe-id" value="'+temporary_iframe_id+'" />');

temp_iframe.data('deferrer' , deferred);

//we save the deferred object to the iframe and in our server side response

//we use "temporary-iframe-id" to access iframe and its deferred object

myform.attr({

'method': 'POST',

'enctype': 'multipart/form-data',

'target': temporary_iframe_id //important

});

myform.get(0).submit();

//if we don't receive a response after 30 seconds, let's declare it as failed!

ie_timeout = setTimeout(function(){

ie_timeout = null;

temp_iframe.attr('src', 'about:blank').remove();

deferred.reject({'status':'fail', 'message':'Timeout!'});

} , 30000);

}

Notes

<input multiple type="file" name="myfiles[]" id="myfiles" />

results matching ""

    No results matching ""