Ajax实现简单图片文件异步上传并显示

在一般的html中,使用form表单标签,里面嵌套标签的文件的对象

  • 将文件对象添加(append方法)进表单(使用key, value形式,key一定要是file
  • 通过XMLHttpRequest对象的send方法异步地提交含有文件的表单对象
  • php保存文件页面

    1. 获取文件对象

    需要使用全局变量 $_FILES["file"] 来获取接收到的文件对象,记得key一定是file

    值得注意的是这个对象也是一个关联式容器,它提供了几个key,分别是"name" "type" "size" "tmp_name" "error",意义如字面意思

    比如想获取接受到的文件名字,可以: $_FILES["file"]["name"] 来获取

    2. 保存文件对象

    使用move_uploaded_file函数可以保存php接受的临时文件,如果不保存,那么文件将在这个php脚本运行结束时被删除
    这个函数第一个参数是临时文件名,可以通过$_FILES["file"]["tmp_name"]来获取,第二个参数是文件保存的路径

    案例:异步上传图片文件

    上传页面代码

    <!DOCTYPE html>
    <meta charset="utf-8">
    <!-- http://localhost:8081/imgStation -->
    <html>
    <head>
    	<title>图片站</title>
    </head>
    <body>
    	<input type="file" id="userfile"><br>
    	<button id="ulbtn">点我上传</button>
    	<div id="div1"></div>
    	<script type="text/javascript">
    		// 编写按钮回调函数,传送文件
    		function uploadFile() {
    			// 获取文件对象
    			var userfile = document.getElementById("userfile").files[0];	
    			if(userfile == null) {
    				alert("请选择图片文件");	// 空提交判断
    				return;
    			}
    			var form = new FormData();		// 创建表单以提交文件
    			form.append("file", userfile);	// 向表单添加文件对象 注意key一定要是file
    			var xhr = new XMLHttpRequest();	
    			// 当后台的fileRecv.php处理完成时,回调显示信息并输出上传的图片
    			xhr.onreadystatechange = function() {
    				var div1 = document.getElementById("div1");
    				if(xhr.readyState==4 && xhr.status==200) {
    					div1.innerHTML += xhr.responseText + "
    "
    ; } } xhr.open("POST", "fileRecv.php"); // 上传到fileRecv.php做处理 xhr.send(form); // 提交表单对象 } document.getElementById("ulbtn").onclick = uploadFile; </script> </body> </html>

    保存页面代码

    这个php页面接受来自上传页面的带有文件的表单的提交,进而通过全局变量 $_FILES["file"]来获取并且保存文件对象到服务器磁盘,同时返回(输出)html语句到上传页面的div标签的innerHTML元素中,使得上传页面能够在不刷新或者跳转的情况下,显示用户上传的图片

    
    move_uploaded_file($_FILES["file"]["tmp_name"], "imgs/" . $_FILES["file"]["name"]);
    echo "上传成功,文件大小为:" . $_FILES["file"]["size"] . " 字节
    "
    ; echo " . $_FILES["file"]["name"] . " width=30%>
    "
    ; ?>

    你可能感兴趣的:(前后端)