jquery-file-upload

下面介绍 用插件实现图片异步上传的代码。 


1   比要的js一个都不能少,他们之间是有依赖关系的。 

jquery-1.8.2.min.js 
jquery.ui.core.js 
jquery.ui.widget.js 
jquery.fileupload.js 
jquery.iframe-transport.js 
jquery.fileupload-process.js 
jquery.fileupload-validate.js 
(最后2个js是有依赖的,缺少的话acceptFileTypes,maxFileSize 不会进行验证) 

2  贴代码: 

<script>
$(function () {

    uploadImageAjaxDelete = function (url,obj){
	    $.ajax({url:url,async:false,dataType:"text",success:function(data){
		      if(data=='1'){
			       //如果删除成功,恢复file的使用,同时是图片渐变消失
			      $(obj).parent().children("input[type='file']").removeAttr("disabled");
				  $(obj).parent().children("img").fadeOut("slow",function(){
			            $(this).add($(obj).parent().children("a")).add($(obj).parent().children("input:hidden")).add($(obj).parent().children("br")).remove();
			      });  
			  }else{
			      alert('图片删除失败!');
			  }
		}});
	}

    $("input[type='file']").fileupload({
        url: 'image_ajax_save.action',
        dataType: 'json',
        autoUpload: true,
        acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
        maxFileSize: 2097152// 2 MB
	}).on('fileuploadadd', function (e, data) {
          $(this).parent().children("label").remove();
		   $("<p class='uploadImgLoad'>上传中... 0%</p>").appendTo($(this).parent());
		  $(this).attr("disabled",true);
	}).on('fileuploadprocessalways', function (e, data) {
		if(data.files.error){
		   $(this).parent().children("p").remove();
		   $(this).removeAttr("disabled");
		   if(data.files[0].error=='acceptFileTypes'){
		       $(this).parent().append("<label class='error'>图片类型错误</label>");
		   }
		   if(data.files[0].error=='maxFileSize'){
		      $(this).parent().append("<label class='error'>图片不能大于2M</label>");
		   }  
		} 
	}).on('fileuploadprogressall', function (e, data) {
	    var $p = $(this).parent().children("p");
	    var progress = parseInt(data.loaded / data.total * 100, 10);
		if($p.length==0){
		    $("<p class='uploadImgLoad'>上传中... "+progress+"%</p>").appendTo($(this).parent());
		}else{
		   console.info(progress);
		   $p.text('上传中... '+progress+'%');
		   if(progress==100){
		      $p.fadeOut("slow",function(){
			     $(this).remove();
			  });
		   }
		} 
	}).on('fileuploaddone', function (e, data) {
	      if(data.result.result=='error'){
		     $(this).removeAttr("disabled");
		     alert('抱歉,上传过快,请稍等!');
		  }else if(data.result.result=='success'){
		    $(this).parent().prepend($("<a href='#' >  删除</a>").attr("onclick","uploadImageAjaxDelete('image_ajax_delete.action?dbFileName="+data.result.dbFileName+"',this)").add("<br/>"))
			.prepend($("<img  width='140' height='90' border='0' />").attr("src",data.result.url))
			.prepend($("<input type='hidden' name="+data.result.hiddenName+" id="+data.result.hiddenName+" value='"+data.result.dbFileName+"' />"));
		  }
	});
	

});

</script>



3效果:见附件图片。 



4 注意:操作的时候一定查看:API,Demo 
https://github.com/blueimp/jQuery-File-Upload/wiki/API 
http://blueimp.github.io/jQuery-File-Upload/basic.html 



校验文件的格式:

<pre>acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
maxFileSize: 99 * 1024 * 1024,
minFileSize: 5,
maxNumberOfFiles: 50,
messages: {
     maxFileSize: 'File exceeds maximum allowed size of 99MB',
     acceptFileTypes: 'File type not allowed'
},processfail: function (e, data) {
     var currentFile = data.files[data.index];
     if (data.files.error && currentFile.error) {
         // there was an error, do something about it
         console.log(currentFile.error);
     }
}</pre>



关于此插件的详细用法注释:

var uploader = $('#fileupload');
uploader.fileupload(
    {
        url: '/feature/attach/dt/create/fild/',
        singleFileUploads: false, //一次上传多个文件
        autoUpload: false,
        //limitMultiFileUploads: 3, //每个请求最多上传3个文件
        maxFileSize: 50 * 1024 * 1024,
        maxNumberOfFiles: 3,
        messages: {
            maxFileSize: '超过允许的最大值!',
            maxNumberOfFiles: '上传的文件数量超过允许的最大值!'
        },
        processfail: function (e, data) {
            //单个文件上传失败
            self.datafile = '';
            // console.log(data)
            // $('#fileupload').fileupload('destroy');
            var currentFile = data.files[data.index];
            if (data.files.error && currentFile.error) {
                // there was an error, do something about it
                // console.log(currentFile);
                if (currentFile.error == '上传的文件数量超过允许的最大值!') {
                    $('#warning_file').css('display', 'block').html('').prepend(currentFile.error + '<br>')
                } else {
                    $('#warning_file').css('display', 'block').prepend(currentFile.name + '&nbsp;&nbsp;&nbsp;&nbsp;' + currentFile.error + '<br>')
                }
            }
            // return false
        },
        change: function () {
            $('#warning_file').css('display', 'none').html('');
            $('#fileupload_file_name').html('')
        },


        start: function (e) {
            // 开始上传后不能再选文件了
            $("#fileupload").attr("disabled", "disabled");
        },
        process: function (e, data) {
            // console.log('回调为单个文件的处理队列的开始。')
            //    回调为单个文件的处理队列的开始。
        },
        processdone: function (e, data) {
            self.datafile = data
            // console.log('单个文件处理圆满结束', data)
            //    单个文件处理圆满结束
        },
        processstart: function (e, data) {
            // console.log('上传队列处理开始')
            //    队列处理开始
        },
        send: function (e, data) {
            // console.log('send')
            //    每个上传文件开始的时候
        },
        sent: function (e, data) {
            console.log('sent')
        },
        started: function (e, data) {
            // console.log('started')
            //    开始的回调等效于开始回调,并且在开始回调运行之后触发,并且在开始回调中调用的过渡效果已经完成。
        },
        stopped: function (e, data) {
            // console.log('stopped')
            //    停止的回调等效于停止回调,并且在停止回调运行并且在停止回调和所有完成回调中调用的过渡效果已完成之后触发
        },
        always: function (e, data) {
            // console.log('always', data)
            //    回调结束(成功,中止或错误)上传请求。这个回调相当于所提供的完整的回调
        },
        // add:function (e,data) {
        //     console.log('add')
        //     data.submit()
        // },
        chunkalways: function (e, data) {
            // console.log('回调结束', data)
            //    回调结束,不论是上传成功还是失败还是终止
        },
        processalways: function (e, data) {
            // console.log('结束一个文件上传队列', data)
            // data.submit()
            //    结束一个文件上传队列
        },
        processstop: function (e, data) {
            // console.log('文件上传队列停止', data)
            //    文件上传队列停止
        },
        completed: function () {
            // console.log('completed')
        },
        progressall: function (e, data) {
            //回调全局上传进度事件。
            var progress = parseInt(data.loaded / data.total * 100, 10);
            $('#progresss').css(
                'width',
                progress + '%'
            );
            $('#progresss').html(progress + '%')
        },
    })
    .bind('fileuploadadd', function (e, data) {

        for (var i = 0; i < data.files.length; i++) {
            $('#fileupload_file_name').prepend(data.files[i].name + '<br>');
        }
    })
    .bind('fileuploadprocessdone', function (e, data) {
        // console.log('wode',data)
        // console.log(data.files[0].error)
        // console.log('fileuploadprocessdone')
    }).bind('fileuploadprocessstart', function (e, data) {
    // console.log('sent111')
    //  console.log(data.files[0].error)
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值