zoukankan      html  css  js  c++  java
  • 图片上传(ajaxFileUpload组件上传)

    用组件实现图片上传的时候,从网上下载下来的js文件里的有些部分需要改的动,不然会出现返回的数据是连标签在内的整个数据。

    在html文件中:

    <input type="file" tabindex="3" title="支持jpg、jpeg、gif、png格式,文件小于5M" size="3" name="pic" class="filePrew" id="uploadfile">
    <button id="ubtn" class="btn_addPic" style="display:none">上传</button>
    <script src="__PUBLIC__/js/jquery-1.8.0.js"></script>
    <script src="__PUBLIC__/js/ajaxfileupload.js"></script>
    <script type="text/javascript">
    function ajaxFileUpload (){
        $.ajaxFileUpload ({
            url :"<{:U('Index/upload')}>",
            secureuri :false,
            fileElementId :'uploadfile',
            dataType : 'json',
            success : function (data, status){
                alert(data);
                return false;
                // if(typeof(data.error) != 'undefined'){
                //     if(data.error != ''){
                //         alert(data.error);
                //     }else{
                //         alert(data.msg);
                //     }
                // }
            },
            error: function (data, status, e){
                alert(e);
            }
        });
    }
    </script>

    在后台php文件中:

    <?php

    public function upload(){
            $upload = new ThinkUpload();// 实例化上传类
            $upload->maxSize   =     3145728 ;// 设置附件上传大小
            $upload->exts      =     array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
            $upload->rootPath  =     './Upload/'; // 设置附件上传根目录
            $upload->savePath  =     ''; // 设置附件上传(子)目录
            // 上传文件
            $info   =   $upload->upload();
            $url=$info['pic']['savepath'].$info['pic']['savename'];
            $roomid=$_SESSION['ingame'];
            $id=$_SESSION['id'];
            $gameinfo=M('game_log')->where('id='.$roomid)->find();
            if($gameinfo['creatorid']==$id && !empty($url)){
                $data['res_img1']=$url;
                $query=M('game_log')->where(array('creatorid'=>$id,'id'=>$roomid))->save($data);
            }
            else if($gameinfo['challengerid']==$id && !empty($url)){
                $data['res_img2']=$url;
                $query=M('game_log')->where(array('challengerid'=>$id,'id'=>$roomid))->save($data);
            }
     
            if($query && $url!=''){
                echo "上传成功";
            }
            else{
                echo "上传失败";
            }
        }
    ?>

    下面附上js文件的完整代码(黄色部分是要改的代码)

    jQuery.extend({
     
        handleError: function( s, xhr, status, e )      {  
                // If a local callback was specified, fire it  
                if ( s.error ) {  
                    s.error.call( s.context || s, xhr, status, e );  
                }  
     
                // Fire the global callback  
                if ( s.global ) {  
                    (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );  
                }
        },
     
        createUploadIframe: function(id, uri)
        {
                //create frame
                var frameId = 'jUploadFrame' + id;
     
                if(window.ActiveXObject) {
                    var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
                    if(typeof uri== 'boolean'){
                        io.src = 'javascript:false';
                    }
                    else if(typeof uri== 'string'){
                        io.src = uri;
                    }
                }
                else {
                    var io = document.createElement('iframe');
                    io.id = frameId;
                    io.name = frameId;
                }
                io.style.position = 'absolute';
                io.style.top = '-1000px';
                io.style.left = '-1000px';
     
                document.body.appendChild(io);
     
                return io            
        },
        createUploadForm: function(id, fileElementId)
        {
            //create form    
            var formId = 'jUploadForm' + id;
            var fileId = 'jUploadFile' + id;
            var form = $('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');    
            var oldElement = $('#' + fileElementId);
            var newElement = $(oldElement).clone();
            $(oldElement).attr('id', fileId);
            $(oldElement).before(newElement);
            $(oldElement).appendTo(form);
            //set attributes
            $(form).css('position', 'absolute');
            $(form).css('top', '-1200px');
            $(form).css('left', '-1200px');
            $(form).appendTo('body');        
            return form;
        },
     
        ajaxFileUpload: function(s) {
            // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout        
            s = jQuery.extend({}, jQuery.ajaxSettings, s);
            var id = new Date().getTime()        
            var form = jQuery.createUploadForm(id, s.fileElementId);
            var io = jQuery.createUploadIframe(id, s.secureuri);
            var frameId = 'jUploadFrame' + id;
            var formId = 'jUploadForm' + id;        
            // Watch for a new set of requests
            if ( s.global && ! jQuery.active++ )
            {
                jQuery.event.trigger( "ajaxStart" );
            }            
            var requestDone = false;
            // Create the request object
            var xml = {}   
            if ( s.global )
                jQuery.event.trigger("ajaxSend", [xml, s]);
            // Wait for a response to come back
            var uploadCallback = function(isTimeout)
            {            
                var io = document.getElementById(frameId);
                try
                {                
                    if(io.contentWindow)
                    {
                         xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
                         xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
     
                    }else if(io.contentDocument)
                    {
                         xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
                        xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
                    }                        
                }catch(e)
                {
                    jQuery.handleError(s, xml, null, e);
                }
                if ( xml || isTimeout == "timeout")
                {                
                    requestDone = true;
                    var status;
                    try {
                        status = isTimeout != "timeout" ? "success" : "error";
                        // Make sure that the request was successful or notmodified
                        if ( status != "error" )
                        {
                            // process the data (runs the xml through httpData regardless of callback)
                            var data = jQuery.uploadHttpData( xml, s.dataType );    
                            // If a local callback was specified, fire it and pass it the data
                            if ( s.success )
                                s.success( data, status );
     
                            // Fire the global callback
                            if( s.global )
                                jQuery.event.trigger( "ajaxSuccess", [xml, s] );
                        } else
                            jQuery.handleError(s, xml, status);
                    } catch(e)
                    {
                        status = "error";
                        jQuery.handleError(s, xml, status, e);
                    }
     
                    // The request was completed
                    if( s.global )
                        jQuery.event.trigger( "ajaxComplete", [xml, s] );
     
                    // Handle the global AJAX counter
                    if ( s.global && ! --jQuery.active )
                        jQuery.event.trigger( "ajaxStop" );
     
                    // Process result
                    if ( s.complete )
                        s.complete(xml, status);
     
                    jQuery(io).unbind()
     
                    setTimeout(function()
                                        {    try
                                            {
                                                $(io).remove();
                                                $(form).remove();    
     
                                            } catch(e)
                                            {
                                                jQuery.handleError(s, xml, null, e);
                                            }                                    
     
                                        }, 100)
     
                    xml = null
     
                }
            }
            // Timeout checker
            if ( s.timeout > 0 )
            {
                setTimeout(function(){
                    // Check to see if the request is still happening
                    if( !requestDone ) uploadCallback( "timeout" );
                }, s.timeout);
            }
            try
            {
               // var io = $('#' + frameId);
                var form = $('#' + formId);
                $(form).attr('action', s.url);
                $(form).attr('method', 'POST');
                $(form).attr('target', frameId);
                if(form.encoding)
                {
                    form.encoding = 'multipart/form-data';                
                }
                else
                {                
                    form.enctype = 'multipart/form-data';
                }            
                $(form).submit();
     
            } catch(e)
            {            
                jQuery.handleError(s, xml, null, e);
            }
            if(window.attachEvent){
                document.getElementById(frameId).attachEvent('onload', uploadCallback);
            }
            else{
                document.getElementById(frameId).addEventListener('load', uploadCallback, false);
            }         
            return {abort: function () {}};    
     
        },
     
        // uploadHttpData: function( r, type ) {
        //     var data = !type;
        //     data = type == "xml" || data ? r.responseXML : r.responseText;
        //     // If the type is "script", eval it in global context
        //     if ( type == "script" )
        //         jQuery.globalEval( data );
        //     // Get the JavaScript object, if JSON is used.
        //     if ( type == "json" )
        //         eval( "data = " + data );
        //     // evaluate scripts within html
        //     if ( type == "html" )
        //         jQuery("<div>").html(data).evalScripts();
        //         //alert($('param', data).each(function(){alert($(this).attr('value'));}));
        //     return data;
        // }
        uploadHttpData: function( r, type ) {
            var data = !type;  
            data = type == "xml" || data ? r.responseXML : r.responseText;  
            // If the type is "script", eval it in global context  
            if ( type == "script" )  
                jQuery.globalEval( data );  
            // Get the JavaScript object, if JSON is used.  
            if ( type == "json" ) {  
                 ////////////以下为新增代码///////////////  
                 data = r.responseText;  
                 var start = data.indexOf(">");  
                 if(start != -1) {  
                   var end = data.indexOf("<", start + 1);  
                   if(end != -1) {  
                     data = data.substring(start + 1, end);  
                    }  
                 }  
                  ///////////以上为新增代码///////////////  
                  eval( "data = " + data);  
            }  
            // evaluate scripts within html  
            if ( type == "html" )  
                jQuery("<div>").html(data).evalScripts();  
     
            return data;  
        }
    })

  • 相关阅读:
    Effective Java 19 Use interfaces only to define types
    Effective Java 18 Prefer interfaces to abstract classes
    Effective Java 17 Design and document for inheritance or else prohibit it
    Effective Java 16 Favor composition over inheritance
    Effective Java 15 Minimize mutability
    Effective Java 14 In public classes, use accessor methods, not public fields
    Effective Java 13 Minimize the accessibility of classes and members
    Effective Java 12 Consider implementing Comparable
    sencha touch SortableList 的使用
    sencha touch dataview 中添加 button 等复杂布局并添加监听事件
  • 原文地址:https://www.cnblogs.com/nnhgd/p/7954199.html
Copyright © 2011-2022 走看看