【uploadify】uploadify上传个数限制

flyingZippo 2015-05-06 11:42:17
用这个做文件上传的个数限制时,功能啥的都实现了,
但是删除一个文件,但是已上传个数没有重置,导致没办法再添加文件

比如只能上传2个,再已经上传2个的情况,删掉一个,再上传就报超过2个的错了

求问:这个文件个数的校验在哪里实现的?有什么办法可以重置已上传个数?
找了半天源码,实在找不到
...全文
1362 16 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
TPLearn 2017-12-22
  • 打赏
  • 举报
回复
遇到了同样的问题,想了个看起来比较low的方法: 动态的重新设置下“uploadLimit”参数,每次删除时将文件限制的数量+1。

//获取当前限制的文件数(比如:限制数为5)
curLimit = $("#uploadify").uploadify('settings','uploadLimit');
//重新设置文件限制数为:5+1。
$("#uploadify").uploadify('settings','uploadLimit',curLimit+1);
qq_20101603 2016-01-09
  • 打赏
  • 举报
回复
楼主,这个问题最后怎么解决了,遇到了跟您一样的问题
flyingZippo 2015-05-07
  • 打赏
  • 举报
回复
引用 12 楼 showbo 的回复:
[quote=引用 9 楼 zhiyi321 的回复:] [quote=引用 8 楼 showbo 的回复:] 你那个删除和uploadify的队列无关了。这样的话你试试获取配置后重设队列的值。
var opt=$("#uploadTowedAccredit").data('uploadify');
opt.queueData.queueSize   -= 1;
opt.queueData.queueLength -= 1;
还是不行,这些值我都改过,没有效果。 我再想,当成功上传2个的时候直接把上传按钮变成不可用好了
$('#uploadTowedAccredit').uploadify("disable",true);
虽然这样不可用了,但是样式没变,我再去搜搜看这flash样式怎么搞[/quote] 那个是DOM样式,swf是透明浮在DOM上面的,你自己用开发工具更新下dom的样式就行。 看了下代码,那个选择文件多少控制是swf里面控制的,不是uploadify。js控制,这个要反编译flash了,就不搞了,麻烦。。[/quote] 谢谢
Go 旅城通票 2015-05-07
  • 打赏
  • 举报
回复
引用 9 楼 zhiyi321 的回复:
[quote=引用 8 楼 showbo 的回复:] 你那个删除和uploadify的队列无关了。这样的话你试试获取配置后重设队列的值。
var opt=$("#uploadTowedAccredit").data('uploadify');
opt.queueData.queueSize   -= 1;
opt.queueData.queueLength -= 1;
还是不行,这些值我都改过,没有效果。 我再想,当成功上传2个的时候直接把上传按钮变成不可用好了
$('#uploadTowedAccredit').uploadify("disable",true);
虽然这样不可用了,但是样式没变,我再去搜搜看这flash样式怎么搞[/quote] 那个是DOM样式,swf是透明浮在DOM上面的,你自己用开发工具更新下dom的样式就行。 看了下代码,那个选择文件多少控制是swf里面控制的,不是uploadify。js控制,这个要反编译flash了,就不搞了,麻烦。。
cde32 2015-05-07
  • 打赏
  • 举报
回复
问一下楼主,这个支持手机上传吗?
flyingZippo 2015-05-07
  • 打赏
  • 举报
回复
引用 9 楼 zhiyi321 的回复:
[quote=引用 8 楼 showbo 的回复:] 你那个删除和uploadify的队列无关了。这样的话你试试获取配置后重设队列的值。
var opt=$("#uploadTowedAccredit").data('uploadify');
opt.queueData.queueSize   -= 1;
opt.queueData.queueLength -= 1;
还是不行,这些值我都改过,没有效果。 我再想,当成功上传2个的时候直接把上传按钮变成不可用好了
$('#uploadTowedAccredit').uploadify("disable",true);
虽然这样不可用了,但是样式没变,我再去搜搜看这flash样式怎么搞[/quote] 请问你那有没有更改上传按钮样式的方法?
flyingZippo 2015-05-07
  • 打赏
  • 举报
回复
引用 8 楼 showbo 的回复:
你那个删除和uploadify的队列无关了。这样的话你试试获取配置后重设队列的值。
var opt=$("#uploadTowedAccredit").data('uploadify');
opt.queueData.queueSize   -= 1;
opt.queueData.queueLength -= 1;
还是不行,这些值我都改过,没有效果。 我再想,当成功上传2个的时候直接把上传按钮变成不可用好了
$('#uploadTowedAccredit').uploadify("disable",true);
虽然这样不可用了,但是样式没变,我再去搜搜看这flash样式怎么搞
Go 旅城通票 2015-05-07
  • 打赏
  • 举报
回复
引用 7 楼 zhiyi321 的回复:
[quote=引用 6 楼 showbo 的回复:] 看代码没有问题。。你删除是什么意思?已经上传完毕了,在客户端生成的图片预览吗? 如果是想继续选择文件,你不应该配置'uploadLimit' : ${towedAccreditPicMax},而是配置queueSizeLimit就行了,queueSizeLimit是限制每次选择的文件数量,uploadLimit控制的是总的选择数量
页面上删除图片预览, 服务器端删除图片中心的图片 queueSizeLimit限制为2的话,就可以上传2张以上的图片了 uploadLimit设置为2的时候,上传第三张图片就会报错,但是页面上删掉一个后,也没办法再次上传[/quote] 你那个删除和uploadify的队列无关了。这样的话你试试获取配置后重设队列的值。
var opt=$("#uploadTowedAccredit").data('uploadify');
opt.queueData.queueSize   -= 1;
opt.queueData.queueLength -= 1;
flyingZippo 2015-05-07
  • 打赏
  • 举报
回复
引用 6 楼 showbo 的回复:
看代码没有问题。。你删除是什么意思?已经上传完毕了,在客户端生成的图片预览吗?

如果是想继续选择文件,你不应该配置'uploadLimit' : ${towedAccreditPicMax},而是配置queueSizeLimit就行了,queueSizeLimit是限制每次选择的文件数量,uploadLimit控制的是总的选择数量


页面上删除图片预览, 服务器端删除图片中心的图片

queueSizeLimit限制为2的话,就可以上传2张以上的图片了

uploadLimit设置为2的时候,上传第三张图片就会报错,但是页面上删掉一个后,也没办法再次上传
Go 旅城通票 2015-05-07
  • 打赏
  • 举报
回复
看代码没有问题。。你删除是什么意思?已经上传完毕了,在客户端生成的图片预览吗? 如果是想继续选择文件,你不应该配置'uploadLimit' : ${towedAccreditPicMax},而是配置queueSizeLimit就行了,queueSizeLimit是限制每次选择的文件数量,uploadLimit控制的是总的选择数量
flyingZippo 2015-05-07
  • 打赏
  • 举报
回复
引用 3 楼 showbo 的回复:
调用cancel方法,不要直接操作dom,cancel方法会自动删除显示的队列对应的dom 如果你不知道队列id,只知道队列的容器id,可以这样获取队列id
var qs=$('#file_upload-queue>div');//所有的队列
var id=qs.eq(2).attr('id');//得到第三个队列的id
$('#xxxx').uploadify('cancel',id);//这样就行了,会自动重置队列数量和删除dom对象,不能直接qs.eq(2).remove(),无效
直接操作dom还要修改很多代码,因为uploadify还有内部变量存储文件信息的,不调用api执行删除,内部存储的file删除不了,你还得修改很多代码。。不单是重置队列长度的问题了
大牛,你好,我把代码贴上去了,麻烦帮忙看一下,是不是我就用错了
flyingZippo 2015-05-07
  • 打赏
  • 举报
回复

function deleteUrl(){
	 $("body").on("click",".img-wrap .mask span",function(event){
		event.stopPropagation();
				 
		var qs=$('#file_upload-queue>div');//所有的队列
		var id=qs.eq(2).attr('id');//得到第三个队列的id
		$('#uploadTowedAccredit').uploadify('cancel',id);//这样就行了,会自动重置队列数量和删除dom对象,不能直接qs.eq(2).remove(),无效
		 
		/*
		if(!window.confirm("您确定删除附件?")){
			return;
		}
		var imgUrl=$(this).parents(".img-wrap").find("img").attr("src");
		deleteImage(imgUrl);
		$(this).parents(".img-wrap").remove();
		*/
	});
};

<li class="blockli clearfix" style="padding-bottom: 5px;">
    <span class="left-name"><em class="red-star">*</em>拖机授权委托书:</span>
    <div class="upload-wrap"  style="width:100px;">
        <input  type="file" name="uploadTowedAccredit" id="uploadTowedAccredit" class="filetext"/>
    </div>
    <span id="uploadTowedAccreditLinkTip" class="warn-tips"><em></em>请上传附件,最多上传${towedAccreditPicMax} 张</span>
    <div id="towedAccreditDiv" class="up-img-list clearfix"></div>
</li>

// 上传拖机授权委托书
function uploadTowedAccreditInit(){
	 $("#uploadTowedAccredit").uploadify({
	    'hideButton':'true',
	    'preventCaching' : 'true',
	    'checkExisting':'true',
		'swf': SWF,  
		'uploader':uploadImg,
		'debug':false,
		'multi': true,
		'method': 'post',
		'preventCaching' : true,
		'removeCompleted' : true,
		'removeTimeout' : 10,
		'requeueErrors' : true,
		'successTimeout' : 30,
		'uploadLimit' : ${towedAccreditPicMax},
		
		'fileObjName' : 'Filedata',
		//单张图片最大限制
		'fileSizeLimit' : '1024KB',
		'fileTypeDesc' : 'Image Files',
		//仅限上传jpg格式图片
		'fileTypeExts' : '*.jpg;*.png',
		'height': 24,
		'width':73,
		'buttonText' : '上传附件',
		'auto': true,
		'buttonClass':'uploada btn-fff-24',
	
		'onSWFReady' : function() {
        }, 
        
		'onInit':function(){
		   //  $("#file_upload-button").css("width","100");
		 },
		        
        //选择图片完成
        'onSelect' : function() {

        },
        
        //取消上传
        'onCancel' : function(file) {
        },
        'onCheck': function(event,data,key) {
        },
        //开始上传
        'onUploadStart' : function(file) {
        	$('.uploadify-queue').html('');
        },
        
        //上传过程中
        'onUploadProgress' : function(file, bytesUploaded, bytesTotal, totalBytesUploaded, totalBytesTotal) {
			$('.uploadify-queue').html('');
			$("#uploadTowedAccreditLinkTip").html('<em></em>上传中...');
        },
        
        //上传完成
        'onUploadComplete' : function(file) {
       		 $('.uploadify-queue').html('');
       		 $("#uploadTowedAccreditLinkTip").html('<em></em>上传成功,待提交');
        },
        
        //上传成功
        'onUploadSuccess' : function(file, data, response) {
        	var obj = eval('(' + data + ')');
       		var result=obj.result;
       		if(result=="true"){
	       		var filename=obj.filename;
	       		$('.uploadify-queue').html('');
	       		$('#towedAccreditDiv').append("<div class='img-wrap'><img width='112' height='84' alt=''  src='"+filename+"'><div class='mask'><em></em><span></span></div></div>");
       		}
        },
        
        //上传失败  //附件格式不正确,请上传JPG、BMP、PNG格式文件,大小不超过3MB
        'onUploadError' : function(file, errorCode, errorMsg, errorString) {
        	switch(errorCode) {
                case -100:
                    alert("上传的文件数量已经超出系统限制的"+$('#uploadTowedAccredit').uploadify('settings','queueSizeLimit')+"个文件!");
                    break;
                case -110:
                    alert("文件 ["+file.name+"] 大小超出系统限制的"+$('#uploadTowedAccredit').uploadify('settings','fileSizeLimit')+"大小!");
                    break;
                case -120:
                    alert("文件 ["+file.name+"] 大小异常!");
                    break;
                case -130:
                    alert("文件 ["+file.name+"] 类型不正确!");
                    break;
        	}
        },
        //上传失败  //附件格式不正确,请上传JPG、BMP、PNG格式文件,大小不超过3MB
        'onSelectError' : function(file, errorCode, errorMsg) {  
	        var msgText = "上传失败\n";  
	        switch (errorCode) {  
	            case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:  
					var towedAccreditDivLen = $("#towedAccreditDiv").children().length;
				    msgText += "每次最多上传 " + $('#uploadTowedAccredit').uploadify('settings','uploadLimit') + "个文件";  
	                break;  
	            case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:  
	                msgText += "文件大小超过限制( " + $('#uploadTowedAccredit').uploadify('settings','fileSizeLimit') + " )";  
	                break;  
	            case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:  
	                msgText += "文件大小为0";  
	                break;  
	            case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:  
	                msgText += "文件格式不正确,仅限 " + $('#uploadTowedAccredit').uploadify('settings','fileTypeExts');  
	                break;  
	            default:  
	                msgText += "错误代码:" + errorCode + "\n" + errorMsg;  
	        }
		    alert(msgText);
	    }
   });
	
	//判断用户是否有安装flash
  var obj = $("#uploadTowedAccredit").children().eq(0);
  if(obj.attr('type')!= "application/x-shockwave-flash"){
        alert('系统检测到您的浏览器没有安装flash插件,为了你能够正常上传图片,建议你安装flash');
        return;
   }
   
   $("#uploadTowedAccredit").css("float","left");
};
Go 旅城通票 2015-05-07
  • 打赏
  • 举报
回复
调用cancel方法,不要直接操作dom,cancel方法会自动删除显示的队列对应的dom
如果你不知道队列id,只知道队列的容器id,可以这样获取队列id
var qs=$('#file_upload-queue>div');//所有的队列
var id=qs.eq(2).attr('id');//得到第三个队列的id
$('#xxxx').uploadify('cancel',id);//这样就行了,会自动重置队列数量和删除dom对象,不能直接qs.eq(2).remove(),无效


直接操作dom还要修改很多代码,因为uploadify还有内部变量存储文件信息的,不调用api执行删除,内部存储的file删除不了,你还得修改很多代码。。不单是重置队列长度的问题了
flyingZippo 2015-05-07
  • 打赏
  • 举报
回复
引用 1 楼 showbo 的回复:
要改未压缩版本的源代码,压缩过的比较难搞。。一堆堆的,不好加代码。 参考:uploadify cancel取消上传再选择文件报超过限制错误
我现在是直接在dom结构里删掉了图片div,怎么调用这个cancel啊? 我手动调用
window["uploadify_" + "uploadTowedAccredit"].queueData.queueSize   -= 1;
                    	window["uploadify_" + "uploadTowedAccredit"].queueData.queueLength -= 1;
也没有起作用,
flyingZippo 2015-05-07
  • 打赏
  • 举报
回复
引用 11 楼 cde32 的回复:
问一下楼主,这个支持手机上传吗?
手机的都用html5的插件了
Go 旅城通票 2015-05-06
  • 打赏
  • 举报
回复
要改未压缩版本的源代码,压缩过的比较难搞。。一堆堆的,不好加代码。

参考:uploadify cancel取消上传再选择文件报超过限制错误
相关推荐
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2015-05-06 11:42
社区公告
暂无公告