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都是支持的。

  

posted @ 2012-12-28 12:22    阅读(1925)  评论(1编辑  收藏  举报