• javascript 无刷新上传图片之原理


    刚开始我认为可以像ajax 那样获取到数据然后通过ajax 发送请求,后来发现浏览器为了客户端的安全默认并没有给javascript 这个权限。这个方法当然是行不同了。我看了好像开源的上传图片原理,当然大部分是flash。但是为了方便使用js的也不少。 
    原理都是使用iframe 上传,在from标签里面有个属性 和a 标签一样 target,target标示这个表单的数据提交的目的地。target里面写iframe的name ,这样表单的数据就提交到了这个 iframe里面。
    根据这个原理实现方法:
    通过
     javascript动态的创建一个 form 和一个  iframe,来上传图片。

    如:

    <iframe name="ss"></iframe>
    <form target="ss" action="a.php" enctype="multipart/form-data">
        <input type="file" onChange="this.submit();">
    </form>

    这个form的提交就会提交到上面那个iframe 里面,也就是后台的输出结果页在iframe里面,用 onChange="this.submit();" 让用户选择好图片时即可上传。

    如在易U里面写的规则是,在一个表单里面的按钮加上 fname 这样一个属性 就会在这里创建一个自动上传

    <form action=""  method="get">
    <input type="button" fname="uimg" funstr="function(){document.title='图片正在上传……';}" funbak="ddd" furl="a.php" value="本地上传">
    </form>
    

      看是一个button 其实一个自动上传,其中ddd是用来获取上传结果的js函数,其他参数说明情况易U官网文档 http://www.yxsss.com/ui/form

    js函数:

    function ddd(da){
            
            if(da.ztai){
                    document.title='上传完成';
                    ui.success('上传成功保存地址为'+da.url);
            }
    }
    

    后台接收a.php

    $path='a.jpg';
    move_uploaded_file($_FILES['uimg']['tmp_name'],$path);
    exit(json_encode(array('ztai'=>true,'url'=>$path)));
    

    然而这东西一次最多只能传递一个文件。如果用户需要上传整个相册或者多张图片,那么技术人员只好从其他途径想办法了,比如Flash或者JS。但是现在通过HTML5提供的新标签,我们就可以完全不需要那些额外的东西了。HTML5为上传文件提供了几个新标签,比如multiple就是为了支持多文件上传专用的。multiple是一个bool标签来表示是否允许用户上传多个文件。比如:

    <form target="ss" action="a.php" enctype="multipart/form-data">
    	<input type="file" onChange="this.submit();" multiple>
    </form>
    

    在最新版的Safari, Chrome, FireFox, IE以及Opera都是支持的。

      

  • 相关阅读:
    Java动态规划实现将数组拆分成相等的两部分
    动态规划解决hdu龟兔赛跑
    Eclipse上将maven项目部署到tomcat,本地tomcat下,webapps下,web-inf下lib下没有jar包决绝方案
    【转】spring IOC和AOP的理解
    Eclipse创建一个普通的java web项目
    linux服务器自动备份与删除postgres数据库数据
    开启Linux服务器vnc远程桌面详细步骤
    设计模式---JDK动态代理和CGLIB代理
    菜谱
    网络协议-dubbo协议
  • 原文地址:https://www.cnblogs.com/jinging/p/2837116.html
Copyright © 2020-2023  润新知