PHP上傳圖片功能實(shí)現(xiàn)

這幾天整理做過(guò)的php項(xiàng)目,感覺這個(gè)經(jīng)常會(huì)用到,傳上來(lái)共享一下咯
首先,前端界面
1、表單的首行需要加上enctype="multipart/form-data",需要上傳的圖片必須設(shè)置 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
因?yàn)閳D片在是二進(jìn)制傳輸,所以需要用new FormData(this)獲取表單非文本類的數(shù)據(jù)(注包括文本類),純文本類數(shù)據(jù)可用$(this).serialize();

$('#form1').submit(function (e) {
    e.preventDefault();
     var data=new FormData(this);//獲取非文本類的數(shù)據(jù)
     $.ajax({
         url:"php/add.php",//處理頁(yè)面的路徑
         data:data,//通過(guò)json格式將一組數(shù)據(jù)傳過(guò)去
         type:"post",//數(shù)據(jù)的提交和傳遞方式,最好用POST
         dataType:"json",//頁(yè)面返回值的類型,共有三種:TEXT,JSON,XML可選
         cache:false,
         contentType:false,
         processData:false,
         success:function(res){//回調(diào)函數(shù):如果ajax調(diào)用成功,就執(zhí)行這個(gè)success后面的函數(shù),(data)當(dāng)做參數(shù)返回過(guò)來(lái)
             if (res.flag===1){
                 alert('上傳成功!');
             } else if(res.flag===2){
                 alert('網(wǎng)絡(luò)或其他未知錯(cuò)誤,請(qǐng)重試!')
             }else{
                 alert('圖片格式錯(cuò)誤,請(qǐng)重試!')
             }
         },
         error: function () {
             alert("error")
         }
     });
 });

3、編寫php文件
connect.php
數(shù)據(jù)庫(kù)連接文件

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

add.php

  • extract($_POST):批量獲取前端post方式傳過(guò)來(lái)的數(shù)據(jù),使用參數(shù)時(shí)參數(shù)名為前端傳過(guò)來(lái)的初始名。

  • in_array(search,array,type):搜索數(shù)組中是否存在指定的值,即元素是否存在與數(shù)組,返回true或false。
    search,必需,規(guī)定要在數(shù)組搜索的值。array,必需,規(guī)定要搜索的數(shù)組。type,可選,如果設(shè)置該參數(shù)為 true,則檢查搜索的數(shù)據(jù)與數(shù)組的值的類型是否相同。

  • count():獲取數(shù)組元素個(gè)數(shù)

  • $_FILES['image']['name']:'image'為前端圖片定義的name,后面的'name'不可變
  • file_exists():檢查圖片是否存在文件夾,存在返回ture,否則false
    -upload:是我圖片上傳目標(biāo)文件

<?php
extract($_POST);
$date = date('Y-m-d');
$file_name = $_FILES['image']['name'];//獲取緩存區(qū)圖片,格式不能變
$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為目標(biāo)文件夾
    }while (file_exists("../" . $path));//檢查圖片是否存在文件夾,存在返回ture,否則false
    $temp_file=$_FILES['image']['tmp_name'];//獲取服務(wù)器里圖片
    include_once ('connect.php');//連接數(shù)據(jù)庫(kù)
    $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);//移動(dòng)臨時(shí)文件到目標(biāo)路徑
        $arr['flag']=1;
        $arr['detail']=[$title,$author,$content,$path];
    }else{
        $arr['flag']=2;
    }
}else{
    $arr['flag']=3;
}
function get_file_name($len)//獲取一串隨機(jī)數(shù)字,用于做上傳到數(shù)據(jù)庫(kù)中文件的名字
{
    $new_file_name = 'A_';
    $chars = "1234567890qwertyuiopasdfghjklzxcvbnm";//隨機(jī)生成圖片名
    for ($i = 0; $i < $len; $i++) {
        $new_file_name .= $chars[mt_rand(0, strlen($chars) - 1)];
    }
    return $new_file_name;
}
echo json_encode($arr);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,803評(píng)論 1 45
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,322評(píng)論 0 17
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級(jí)和職位的變化,入門級(jí)到專家級(jí),廣度和深度都會(huì)有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,678評(píng)論 0 7
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,813評(píng)論 0 3
  • HTML 5 HTML5概述 因特網(wǎng)上的信息是以網(wǎng)頁(yè)的形式展示給用戶的,因此網(wǎng)頁(yè)是網(wǎng)絡(luò)信息傳遞的載體。網(wǎng)頁(yè)文件是用...
    阿啊阿吖丁閱讀 4,942評(píng)論 0 0

友情鏈接更多精彩內(nèi)容