AJAX+PHP上传图片,Jquery无刷新上传图片

45 篇文章 3 订阅

index.html

<!DOCTYPE html>
<html>
<head>
	<title>AJAX上传图片</title>
	<meta charset="utf-8">
	<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
</head>
<body>
	<h1>AJAX上传图片</h1>

	<!-- 表单 -->
	<form id="imgform" enctype="multipart/form-data">
		<div id="select_file">
			选择图片文件
			<input type="file" id="imgselect" name="file"/>
		</div>
	</form>

	<!-- 上传结果 -->
	<div id="imgdiv" style="width: 300px;"><div>

	<!-- 获取文件名 -->
	<script type="text/javascript">
	$("#imgselect").change(function(e){
		// 获取点击的控件
		var files = e.target.files;
		// 判断是否已经选择了图片
		if(files.length>0){
			// 获取文件名
			var fileName = files[0].name;
			// 获取表单数据
			var image = new FormData(document.getElementById("imgform"));
			// AJAX上传图片
			$.ajax({
				url:"upload.php",
				type:"post",
				data:image,
				cache: false,
				processData: false,
				contentType: false,
				success:function(data){
					if (data.code == "200") {
						$("#imgdiv").html("<img src='"+data.url+"' width='300'/>");
					}
					// 上传成功后,清空选择的文件
					$("#imgselect").val("");
				},
				error:function(data){
					alert("上传失败,请检查服务器通讯状态和上传文件权限。");
				}
			})
		}
	})
	</script>
</body>
</html>

upload.php

<?php
// 返回JSON格式的文件类型
header("Content-type:application/json");
 
// 获取原始文件名
$file = $_FILES["file"]["name"];
 
// 获取文件后缀名
$hzm = substr($file,strpos($file,"."));
 
// 重命名文件
// 重命名组成规则:当前日期+当前时间戳
$newfile = date('Y-m-d').'-'.time().$hzm;
 
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $file);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 5242880)
&& in_array($extension, $allowedExts)){
    // 如果上传的文件类型在以上数组中
    if ($_FILES["file"]["error"] > 0){
        // 如果错误码>0则上传发生错误
        $result = array(
            'code' => '202',
            'msg' => '上传文件发生错误,错误原因:'.$_FILES["file"]["error"]
        );
    }else{
        // 否则上传正常
        // 判断是否存在upload目录
        $filepath="upload";
        if (is_dir($filepath)){
            // 目录存在
            // 将文件上传到这个目录
            move_uploaded_file($_FILES["file"]["tmp_name"],$filepath."/".$newfile);
            // 获取服务器域名和当前程序所在目录的URL
            $SERVER = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"];
            $url = dirname($SERVER).'/'.$filepath.'/'.$newfile;
            $result = array(
                'code' => '200',
                'msg' => '上传成功',
                'url' => $url
            );
        }else{
            // 目录不存在
            // 创建目录
            $creatfilepath = mkdir(iconv("UTF-8", "GBK", $filepath),0777,true);
            // 获取服务器域名和当前程序所在目录的URL
            $SERVER = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"];
            $url = dirname($SERVER).'/'.$filepath.'/'.$newfile;
            if ($creatfilepath) {
                // 目录创建成功
                $result = array(
                    'code' => '200',
                    'msg' => '上传成功',
                    'url' => $url
                );
                // 将文件上传到这个目录
                move_uploaded_file($_FILES["file"]["tmp_name"],$filepath."/".$newfile);
            }else{
                // 目录创建失败
                $result = array(
                    'code' => '203',
                    'msg' => $filepath.'目录创建失败,请重试或手动创建目录!'
                );
            }
        }
    }
}else{
    // 如果上传的文件类型不在以上数组中
    $result = array(
        'code' => '201',
        'msg' => '不允许上传此类文件'
    );
}

// 输出JSON
echo json_encode($result,JSON_UNESCAPED_UNICODE);
?>

演示

可以加我微信进入我的技术交流群:sansure2016

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TANKING-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值