php+ajax实现图片文件上传功能实例


Posted in PHP onJune 17, 2014

目前常用的异步文件上传功能有几种,比较多见的如使用iframe框架形式,ajax功能效果,以及flash+php功能,下面介绍ajax与iframe实现异步文件上传的功能的例子。

方法一,利用jquery ajaxfileupload.js实现文件上传

其实就是实现无刷新式的文件上传。可采用IFRAME文件上传原理。
实际上在用PHP上传文件时。。。只能用$_FILES形式,但是若我们只是单一的用JS方式取其ID,如<input id='img' type='file'>..document.getElementById('img').value或者jquery形式的$("#img")都是不能正真实际上传的(但是还是有很多人这样做,刚开始时我也是)。
可是功能上又要要求实现所谓的“异步上传”,怎么办呢?只能借助于第三方的组件,或者自己写一个(在网页里嵌入一个IFRAME)。但如果是考虑开发时间,建议用第三方的,这里有一个不错的jQuery 的Ajax文件上传的组件,即“ajaxfileupload.js",其组件下载地址为://img.jbzj.com/file_images/article/201306/js/ajaxfileupload.js

过程:

(1 )前端文件的代码: test.php

<script type="text/javascript" src="jquery.js"></script> 
 <script type="text/javascript" src="ajaxfileupload.js"></script>
 <script type="text/javascript">
 function ajaxFileUpload()
{
$.ajaxFileUpload
(
  {
 url:'doajaxfileupload.php', //你处理上传文件的服务端
 secureuri:false,
 fileElementId:'img',
 dataType: 'json',
 success: function (data)
 {
alert(data.file_infor);
 }
 }
 )
  return false;
  } 
  </script>
相应的HTML为:
  <input id="img" type="file" size="45" name="img" class="input">
  <button class="button" id="buttonUpload" onclick="return ajaxFileUpload();">Upload</button>

这样客户端就完成了。

(2) 在服务器端的doajaxfileupload.php

此处为了简便的检测是否真正的传值过来了,你可以将它存起来了。

$file_infor = var_export($_FILES,true);
 file_put_contents("d:file_infor.php".$file_infor);

 这样你打来刚生成的file_infor.php文件时,你又看到了熟悉的信息了:

array(
 'name'=>'lamp.jpg',
 'type'=>'image/pjpeg',
 'tmp_name'=>'c:windowstempphpFA.tmp',
 'error'=>0,
 'size'=>3127
)

当然,真正的处理类于这样的:

<?php
  $upFilePath = "d:/";
  $ok=@move_uploaded_file($_FILES['img']['tmp_name'],$upFilePath);
if($ok === FALSE){
 echo json_encode('file_infor'=>'上传失败');
}else{
 echo json_encode('file_infor'=>'上传成功');
}
?>

方法二,利用iframe框架上传图片

html代码如下:

<div class="frm">
  <form name="uploadFrom" id="uploadFrom" action="upload.php" method="post"  target="tarframe" enctype="multipart/form-data">
   <input type="file" id="upload_file" name="upfile">
  </form>
  <iframe src=""  width="0" height="0" style="display:none;" name="tarframe"></iframe>
 </div>
 <div id="msg">
 </div>

index.js文件:

$(function(){
 $("#upload_file").change(function(){
   $("#uploadFrom").submit();
 });
});
function stopSend(str){
 var im="<img src='upload/images/"+str+"'>";
 $("#msg").append(im);
}

upload.php文件:

<?php
 $file=$_FILES['upfile'];
 $name=rand(0,500000).dechex(rand(0,10000)).".jpg";
 move_uploaded_file($file['tmp_name'],"upload/images/".$name);
//调用iframe父窗口的js 函数
 echo "<script>parent.stopSend('$name')</script>";
?>

方法三,原生态ajax文件上传

<!DOCTYPE html>
<html>
<head>
    <title>Html5 Ajax 上传文件</title>
    <meta charset="utf-8">
<script type="text/javascript">
    var xhr;
    function createXMLHttpRequest()
    {
        if(window.ActiveXObject)
        {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        else if(window.XMLHttpRequest)
        {
            xhr = new XMLHttpRequest();
        }
    }
    function UpladFile()
    {
        var fileObj = document.getElementById("file").files[0];
        var FileController = 'upload.php';
        var form = new FormData();
        form.append("myfile", fileObj);
        createXMLHttpRequest();
        xhr.onreadystatechange = handleStateChange;
        xhr.open("post", FileController, true);
        xhr.send(form);
    }
    function handleStateChange()
    {
        if(xhr.readyState == 4)
        {
            if (xhr.status == 200 || xhr.status == 0)
            {
                var result = xhr.responseText;
                var json = eval("(" + result + ")");
                alert('图片链接:n'+json.file);
            }
        }
    }
</script>
<style>
    .txt{ height:28px; border:1px solid #cdcdcd; width:670px;}
    .mybtn{ background-color:#FFF; line-height:14px;vertical-align:middle;border:1px solid #CDCDCD;height:30px; width:70px;}
    .file{ position:absolute; top:0; right:80px; height:24px; filter:alpha(opacity:0);opacity: 0;width:260px }
</style>
</head>
<body>
<div class="form-group">
    <label class="control-label">图片</label>
    <br/>
    <input type='text' name='textfield' id='textfield' class='txt' />
    <span onclick="file.click()"  class="mybtn">浏览...</span>
    <input type="file" name="file" class="file" id="file" size="28" onchange="document.getElementById('textfield').value=this.value" />
    <span onclick="UpladFile()" class="mybtn">上传</span>
</div>
</body>
</html>

php代码:

<?php
if(isset($_FILES["myfile"]))
{
$ret = array();
$uploadDir = 'images'.DIRECTORY_SEPARATOR.date("Ymd").DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__).DIRECTORY_SEPARATOR.$uploadDir;
file_exists($dir) || (mkdir($dir,0777,true) && chmod($dir,0777));
if(!is_array($_FILES["myfile"]["name"])) //single file
{
$fileName = time().uniqid().'.'.pathinfo($_FILES["myfile"]["name"])['extension'];
move_uploaded_file($_FILES["myfile"]["tmp_name"],$dir.$fileName);
$ret['file'] = DIRECTORY_SEPARATOR.$uploadDir.$fileName;
}
echo json_encode($ret);
}
?>
PHP 相关文章推荐
PHP 5.0对象模型深度探索之绑定
Sep 05 PHP
php 过滤器实现代码
Aug 09 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
Sep 11 PHP
laravel-admin 实现给grid的列添加行数序号的方法
Oct 08 PHP
php查看一个变量的占用内存的实例代码
Mar 29 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 PHP
关于PHP中interface的用处详解
Jul 26 PHP
PHP超全局变量实现原理及代码解析
Sep 01 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 #PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 #PHP
Thinkphp中Create方法深入探究
Jun 16 #PHP
ThinkPHP中的关联模型注意点
Jun 16 #PHP
用PHP代替JS玩转DOM的思路及示例代码
Jun 15 #PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 #PHP
浅析PHP的静态成员函数效率更高的原因
Jun 13 #PHP
You might like
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
5种Python单例模式的实现方式
2016/01/14 Python
用Python一键搭建Http服务器的方法
2018/06/01 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
超实用的 30 段 Python 案例
2019/10/10 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
专业销售业务员求职信
2013/11/18 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
入学申请自荐信范文
2014/02/26 职场文书
安全生产月演讲稿
2014/05/09 职场文书
洗手间标语
2014/06/23 职场文书
暑期培训班策划方案
2014/08/26 职场文书
2014年教务工作总结
2014/12/03 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
python多线程方法详解
2022/01/18 Python