PHP上传图片功能实现

这几天整理做过的php项目,感觉这个经常会用到,传上来共享一下咯
首先,前端界面
1、表单的首行需要加上enctype="multipart/form-data",需要上传的图片必须设置 type="file"表示选择文件

<form id="img_form" method="post" class="form-horizontal" role="form" enctype="multipart/form-data">
     <label class="col-sm-3 control-label" for="image">图片:</label>
        <div class="col-sm-9 require">
            <input type="hidden" name="MAX_FILE_SIZE" value="2000000">//文件最大尺寸
            <input type="file" class="form-control" name="image" id="image">
        </div>
    </div>
  </form>

2、为表单添加事件,我用的是ajax
因为图片在是二进制传输,所以需要用new FormData(this)获取表单非文本类的数据(注包括文本类),纯文本类数据可用$(this).serialize();

$('#form1').submit(function (e) {
    e.preventDefault();
     var data=new FormData(this);//获取非文本类的数据
     $.ajax({
         url:"php/add.php",//处理页面的路径
         data:data,//通过json格式将一组数据传过去
         type:"post",//数据的提交和传递方式,最好用POST
         dataType:"json",//页面返回值的类型,共有三种:TEXT,JSON,XML可选
         cache:false,
         contentType:false,
         processData:false,
         success:function(res){//回调函数:如果ajax调用成功,就执行这个success后面的函数,(data)当做参数返回过来
             if (res.flag===1){
                 alert('上传成功!');
             } else if(res.flag===2){
                 alert('网络或其他未知错误,请重试!')
             }else{
                 alert('图片格式错误,请重试!')
             }
         },
         error: function () {
             alert("error")
         }
     });
 });

3、编写php文件
connect.php
数据库连接文件

<?php
$link=new PDO("mysql:host=localhost;port=3306;dbname=db","root","");
$link->query("set names utf8");

add.php

  • extract($_POST):批量获取前端post方式传过来的数据,使用参数时参数名为前端传过来的初始名。

  • in_array(search,array,type):搜索数组中是否存在指定的值,即元素是否存在与数组,返回true或false。
    search,必需,规定要在数组搜索的值。array,必需,规定要搜索的数组。type,可选,如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

  • count():获取数组元素个数

  • $_FILES['image']['name']:'image'为前端图片定义的name,后面的'name'不可变
  • file_exists():检查图片是否存在文件夹,存在返回ture,否则false
    -upload:是我图片上传目标文件

<?php
extract($_POST);
$date = date('Y-m-d');
$file_name = $_FILES['image']['name'];//获取缓存区图片,格式不能变
$type = array("jpg", "gif", 'png', 'bmp');//允许选择的图片类型
$ext = explode(".", $file_name);//拆分获取图片名
$ext = $ext[count($ext) - 1];//取图片的后缀名
if (in_array($ext,$type)){
    do{
        $new_name = get_file_name(6).'.'.$ext;
        $path='upload/'.$new_name;//upload为目标文件夹
    }while (file_exists("../" . $path));//检查图片是否存在文件夹,存在返回ture,否则false
    $temp_file=$_FILES['image']['tmp_name'];//获取服务器里图片
    include_once ('connect.php');//连接数据库
    $result = $link->exec("INSERT INTO `news`(`title`,`author`, `content`, `src`,`time`) VALUES ('$title','$author','$content','$path','$date')");
    if ($result){
        move_uploaded_file($temp_file,"../" .$path);//移动临时文件到目标路径
        $arr['flag']=1;
        $arr['detail']=[$title,$author,$content,$path];
    }else{
        $arr['flag']=2;
    }
}else{
    $arr['flag']=3;
}
function get_file_name($len)//获取一串随机数字,用于做上传到数据库中文件的名字
{
    $new_file_name = 'A_';
    $chars = "1234567890qwertyuiopasdfghjklzxcvbnm";//随机生成图片名
    for ($i = 0; $i < $len; $i++) {
        $new_file_name .= $chars[mt_rand(0, strlen($chars) - 1)];
    }
    return $new_file_name;
}
echo json_encode($arr);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,632评论 1 45
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,510评论 0 17
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,606评论 0 7
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,290评论 0 3
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 4,060评论 0 0