zoukankan      html  css  js  c++  java
  • struts+swfupload实现批量图片上传(上):swfupload

    custom_settings : {
    	progressTarget : "fsUploadProgress",
    	cancelButtonId : "btnCancel",
    	uploadButtonId : "btnUpload",
    	myFileListTarget : "idFileList"
    },
    

     custom_settings调用方法 this.customSettings.cancelButtonId

    缩略图js 
    //this.startResizedUpload(this.getFile(0).ID, this.customSettings.thumbnail_width, this.customSettings.thumbnail_height, SWFUpload.RESIZE_ENCODING.JPEG, this.customSettings.thumbnail_quality, false); 替换this.startUpload();

    完成文件入列队(fileQueued) →
    完成选择文件(fileDialogComplete) → 开始上传文件(uploadStart) → 上传处理(uploadProgress) → 上传成功(uploadSuccess) → 上传完成(uploadComplete)  →列队完成(queueComplete)
    如上所示,单选文件顺序执行以上回调函数,需要注意的是选择多个文件,fileQueued、queueComplete只会执行一次,而fileDialogComplet...→ uploadComplete每个文件都执行一次。

    use_query_string  该属性可选值为true和false,设置post_params是否以GET方式发送。如果为false,那么则以POST形式发送。

    post_params 定义的是一个包含值对的object类型数据,每个文件上传的时候,其中的值对都会被一同发送到服务端。

    prevent_swf_caching 默认值:true
    (v2.2.0新增)该布尔值设置是否在Flash URL后添加一个随机值,用来防止浏览器缓存了该SWF影片。这是为了解决一些基于IE-engine的浏览器上的出现一个BUG。
    button_action默认值:SWFUpload.BUTTON_ACTION.SELECT_FILES(多文件上传)
    (v2.2.0新增) 设置Flash Button点击以后的动作。默认为SWFUpload.BUTTON_ACTION.SELECT_FILES,点击按钮将会打开多文件上传的对话框。 如果设置为SWFUpload.BUTTON_ACTION.SELECT_FILE,则为单文件上传。如果设置为 SWFUpload.BUTTON_ACTION.START_UPLOAD,则启动文件上传。

    file_post_name : "Filedata" ,默认值: Filedata

    该参数设置了POST信息中上传文件的name值(类似传统Form中设置了<input type="file" name="uploadImg"/>的name属性)。

    <input id="btnCancel" type="button" value="取消全部" onclick="swfu.cancelQueue();"/>

    <input id="btnCancel" type="button" value="上传相片" onclick="swfu.startUpload();"/>

    File Object
    File Object包含了一组可用的文件属性,很多处理事件都会传递一个File Object参数来访问该文件的相关属性。
    {
    id : string, // SWFUpload控制的文件的id,通过指定该id可启动此文件的上传、退出上传等
    index : number, // 文件在选定文件队列(包括出错、退出、排队的文件)中的索引,getFile可使用此索引
    name : string, // 文件名,不包括文件的路径。
    size : number, // 文件字节数
    type : string, // 客户端操作系统设置的文件类型
    creationdate : Date, // 文件的创建时间
    modificationdate : Date, // 文件的最后修改时间
    filestatus : number // 文件的当前状态,对应的状态代码可查看SWFUpload.FILE_STATUS
    }

    Stats Object
    该对象提供了上传队列的状态信息,访问实例的getStats方法可获取此对象。
    该对象包括下面属性:
    {
    in_progress : number // 值为1或0,1表示当前有文件正在上传,0表示当前没有文件正在上传
    files_queued : number // 当前上传队列中存在的文件数量
    successful_uploads : number // 已经上传成功(uploadSuccess触发)的文件数量
    upload_errors : number // 已经上传失败的文件数量 (不包括退出上传的文件)
    upload_cancelled : number // 退出上传的文件数量
    queue_errors : number // 入队失败(fileQueueError触发)的文件数量
    }
    所有这些属性的值都可以使用setStats方法来修改,除了in_progress 和 files_queued。

    成功上传个数
    this.getStats().successful_uploads
    等待上传个数
    swfUploadInstance.getStats().files_queued;

    swfupload_loaded_handler
    该事件函数是内部事件,因此不能被重写。当SWFupload实例化,加载的FLASH完成所有初始化操作时触发此事件。
    file_dialog_complete_handler : fileDialogComplete
    如果你希望在用户选择完文件后自动开始上传操作,那么可以将 this.startUpload() 操作放在这里 。如果想选择 后单独上传就不要加入 file_dialog_complete_handler : fileDialogComplete,或加入里面不能有this.startUpload()

    function fileDialogComplete(numFilesSelected, numFilesQueued) {
        try {
            if (numFilesSelected > 0) {
                document.getElementById(this.customSettings.cancelButtonId).disabled = false;
            }
            /* I want auto start the upload and I can do that here */
            if(this.settings.auto_upload){//是否要上传
                this.startUpload();
            }
        } catch (ex)  {
            this.debug(ex);
        }
    }

    支持一键批量上传

    function uploadComplete(file) {
    	try {
    		/*  I want the next upload to continue automatically so I'll call startUpload here */
    		if (this.getStats().files_queued > 0) {
    			//this.startResizedUpload(this.getFile(0).ID, this.customSettings.thumbnail_width, this.customSettings.thumbnail_height, SWFUpload.RESIZE_ENCODING.JPEG, this.customSettings.thumbnail_quality, false);
    			this.startUpload();
    		} else {
    			var progress = new FileProgress(file,  this.customSettings.upload_target);
    			progress.setComplete();
    			progress.setStatus("All images received.");
    			progress.toggleCancel(false);
    		}
    	} catch (ex) {
    		this.debug(ex);
    	}
    }
    

     系统默认的js是swfupload.js,其他的都是自己开发修改的添加捕获事件函数如handlers.js。 file上传前的图片信息,serverData接收服务端字符串并转为数组类型,可以返回处理后的图片信息。后台处理程序必须 返回输出 字符串(json_encode转换或拼接等)

    function uploadSuccess(file, serverData) {
        var isSuccess = (serverData.indexOf("successed")==0?true:false);
        try {
            if(isSuccess){//上传成功回调
                var tr = document.getElementById(file.id);
                tr.style.color="green";
                var bar = document.getElementById(file.id+"_bar");
                bar.parentNode.innerHTML="上传成功";
                var delObject = document.getElementById(file.id+"_del");
                delObject.parentNode.innerHTML="&nbsp;";
                document.getElementById(this.customSettings.myFileListTarget+"Count").innerHTML=this.getStats().files_queued;
            //addImage("index.php?r=site/Thumb&id=" + serverData.substring(7));    //缩略图的显示     
            }else{
                var tr = document.getElementById(file.id);
                tr.style.color="red";
                var bar = document.getElementById(file.id+"_bar");
                bar.parentNode.innerHTML="上传失败:"+serverData;
                var delObject = document.getElementById(file.id+"_del");
                delObject.parentNode.innerHTML="&nbsp;";
            }
        } catch (ex) {
            this.debug(ex);
        }
    }

    功能完全支持ie和firefox浏览器!同样也支持safari浏览器!
    一般的WEB方式文件上传只能一个一个的进行上传,在某些应用上就显得很不人性化,客户们都希望能够1次选择很多文件,然后让系统把选择的文件全部上传。

    有些朋友看到这里,就知道了,其实就是swfupload方法,具体信息可以访问swfupload官方网站:http://www.swfupload.org/
    让我们先来看看客户端的界面效果图。(多选文件,批量上传,上传进度显示)

    要做到图中的效果,其实很方便,看完下面的描述,相信大家都可以实现上图中的效果了。
    说明:swfupload2中通过一个png图片与flash插件进行关联,可以修改images下的png图片来(如上图中的[选择文件]图片)自定义显示自己想要的图片样子(不要修改图片名字和格式)。

     本文转载于:http://hudeyong926.iteye.com/blog/904373

  • 相关阅读:
    Layui的一些心得
    Oracle工具PLSQL
    .NET开发中 springMVC+NHibernate注入失败的几个常见错误
    配置好运行后Error creating context 'spring.root': Could not load type from string value
    css样式添加错误导致烦扰
    Oracle时间与系统不同步,TimeStampService
    前端入门10-JavaScript语法之对象
    前端入门9-JavaScript语法之运算符
    前端入门8-JavaScript语法之数据类型和变量
    前端入门7-JavaScript语法之相关术语
  • 原文地址:https://www.cnblogs.com/ningvsban/p/2831480.html
Copyright © 2011-2022 走看看