zoukankan      html  css  js  c++  java
  • php利用iframe实现无刷新文件上传功能


    上传原理很简单就是利用表单的打开方式为iframe的name名,这样就可以在当前页面的iframe打来了,实现文件上传,再利用js返回上传结果。

    form target .在 action 属性中规定的页面会在新窗口中打开。如果是iframe,则在此iframe中打开。

    phpAjaxUpload.php
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">
    function startUpload()
    {
        document.getElementById('processing').innerHTML="正在上传中";
         
    }
    function stopUpload(result)
    {
        var msg;
        switch(result)
        {
            case 0:
                msg="上传成功";
                break;
            case 1:
                msg='文件大小超过限制';
                break;
            case 2:
                msg='只能上传图片文件';
                break;
            case 3:
                msg='move_uploaded_file失败';
                break;
            case 4:
                msg="其他错误";
                break;
            default:
                break;
        }
        document.getElementById('processing').innerHTML=msg;
        alert(msg);
    }
    </script>
            
    </head>
    
    <body>
     
    <div id="processing">结果信息</div> 
    <form action="phpAjaxUpload2.php" method="post" enctype="multipart/form-data"  target="uploadFrame" onsubmit="startUpload()">
    <label for="myFile">上传文件</label>
    <input type="hidden" name="MAX_FILE_SIZE" value="1024000" /><input  type="file" name="myFile" id="myFile" />
    <input type="submit" name="submit" value="上传" />
    
    </form>
    <iframe  name="uploadFrame"  style="0;height:0; border:0;"></iframe>
    
    </body>
    </html>
    上面的iframe中设置width,height为0,还有一点border为0,否则还是有一点边框。注意
    MAX_FILE_SIZE要仔细设定,如果文件大小大于它,那么php端$_FILES['image']['size']就会为0.

    phpAjaxUpload2.php
    hello
    <?php
    $result;
    if(isset($_POST['submit']))
    {
        
        $dir='asaph/';
         $maxSize=1*pow(2,20);
         $fileTypes=array('jpg','png','gif','bmp');
         $myFileType=substr($_FILES['myFile']['name'],strpos($_FILES['myFile']['name'],'.')+1);
         
         if($_FILES['myFile']['size']>$maxSize)
         {
             $result=1;
         }
         else if(!in_array($myFileType,$fileTypes))
         {
             $result=2;
         }
         else if(is_uploaded_file($_FILES['myFile']['tmp_name']))
         {
             $dest=$dir.$_FILES['myFile']['name'];
            if( @move_uploaded_file($_FILES['myFile']['tmp_name'],$dest))
             {
                $result=0;
             }
            else
            {
                $result=3;
            }
         }
         else
         {
             $result=4;
         }
    }
    
    ?> 
    <script type="text/javascript"> 
    window.top.stopUpload(<?php echo $result;?>);
    </script>
    更多:http://zccst.iteye.com/blog/1276920
    input file美化看:http://www.oschina.net/code/snippet_273800_20312


  • 相关阅读:
    第十八章 并发登录人数控制——《跟我学Shiro》(http://blog.csdn.net/lhacker/article/details/19334305)
    spring4 hibernate4 transaction
    sqllite
    http://www.cnblogs.com/enshrineZither/p/3793459.html
    MyBatis 显示日志
    Centos7配置更新国内yum源
    解决Centos运行yum 报错:坏的解释器
    用python生成基于lombok 和 hibernate 生成javabean
    数据库事务中的隔离级别和锁+spring Transactional注解
    springmvc 通过异常增强返回给客户端统一格式
  • 原文地址:https://www.cnblogs.com/youxin/p/3243871.html
Copyright © 2011-2022 走看看