摘要:本文接下來的內(nèi)容講的是如何通過實(shí)現(xiàn)圖片的上傳與下載構(gòu)建上傳文件前端頁面這里我借助前端框架以及圖標(biāo)庫,內(nèi)容很簡單就一個(gè)圖片上傳框以及一個(gè)提交按鈕,代碼如下上傳圖片上傳其中隱藏域主要是用來現(xiàn)在文件上傳大小的,設(shè)置為設(shè)置接收
本文接下來的內(nèi)容講的是如何通過php實(shí)現(xiàn)圖片的上傳與下載
構(gòu)建上傳文件前端頁面這里我借助bootstrap前端框架以及fontawesome圖標(biāo)庫,內(nèi)容很簡單就一個(gè)圖片上傳框以及一個(gè)提交按鈕,代碼如下:
其中:
隱藏域主要是用來現(xiàn)在文件上傳大小的,設(shè)置為2M=>2*1024*1024=>2097152
設(shè)置接收文件類型為圖片格式,可多張圖片上傳,注意name屬性值為file[]時(shí)服務(wù)器可接收多圖片
文件從前端上傳到服務(wù)器之后,服務(wù)器得到上傳文件的信息之后進(jìn)行處理,主要包括以下幾點(diǎn):
首先圖片上傳有沒有錯(cuò)誤,如果沒有下一步,有則返回錯(cuò)誤信息
檢測文件上傳的大小
檢測文件類型,看是否為圖片類型
檢測是否為真實(shí)圖片類型,有些圖片可能是偽造的,比如我們把一個(gè)文本文件擴(kuò)展名修改成圖片類型,上述幾條照樣通過
移動(dòng)服務(wù)器臨時(shí)文件到指定目錄
針對(duì)2、3步有人可能會(huì)問,我們不是前端已經(jīng)在隱藏域中限制上傳大小了嘛,而且也設(shè)置了文件的接收類型,為什么服務(wù)器還要進(jìn)行驗(yàn)證呢?有句話是這么說的,服務(wù)器永遠(yuǎn)不要相信客戶端傳過來的數(shù)據(jù),有過編程經(jīng)驗(yàn)的人都知道,我們可以在瀏覽器修改前端的頁面結(jié)構(gòu)以及內(nèi)容,而且還可以偽造數(shù)據(jù),前端的驗(yàn)證只是起到過濾的作用,并不能一勞永逸,服務(wù)器還是得驗(yàn)證前臺(tái)傳過來的數(shù)據(jù)
接下來直接看代碼,處理文件上傳函數(shù)upload_fun.php:
$val) { $files[$i]["name"] = $file["name"][$key]; $files[$i]["type"] = $file["type"][$key]; $files[$i]["tmp_name"] = $file["tmp_name"][$key]; $files[$i]["error"] = $file["error"][$key]; $files[$i]["size"] = $file["size"][$key]; $i++; } } } return $files; } /** * 獲取文件的擴(kuò)展名 * @param $filename:文件名 * @return string 擴(kuò)展名 */ function getExt($filename) { return strtolower(pathinfo($filename, PATHINFO_EXTENSION)); } /** * 生成唯一字符串作為文件名 * @return string 唯一文件名 */ function getUniName() { return md5(uniqid(microtime(true), true)); } /** * 上傳文件主處理模塊 * @param $fileInfo:文件信息 * @param string $path:上傳文件路徑 * @param bool $flag:是否開啟驗(yàn)證是否為真實(shí)圖片 * @param int $maxSize:文件最大上傳大小 * @param array $allowExt:允許的文件擴(kuò)展名 * @return array 信息 */ function upload_file($fileInfo, $path = "./uploads", $flag = true, $maxSize = 2*1024 * 1024, $allowExt = ["jpeg", "jpg", "png", "gif"]) { $res = []; if ($fileInfo["error"] == UPLOAD_ERR_OK) { $ext = getExt($fileInfo["name"]); $uniName = getUniName(); $dest = $path . "/" . $uniName . "." . $ext; //檢測上傳文件大小 if ($fileInfo["size"] > $maxSize) { $res["msg"] = $fileInfo["name"] . "上傳文件過大"; } //上傳文件類型 if (!in_array($ext, $allowExt)) { $res["msg"] = $fileInfo["name"] . "非法文件類型"; } //檢測是否為真實(shí)圖片 if ($flag) { if (!getimagesize($fileInfo["tmp_name"])) { $res["mes"] = $fileInfo["name"] . "不是真實(shí)圖片"; } } if ($res) return $res; if (!file_exists($path)) { mkdir($path, 0777, true); } if (!@move_uploaded_file($fileInfo["tmp_name"], $dest)) { $res["msg"] = $fileInfo["name"] . "文件上傳失敗"; } else { $res["msg"] = $fileInfo["name"] . "文件上傳成功"; $res["dest"] = $dest; } return $res; } else { //判斷錯(cuò)誤信息 switch ($fileInfo["error"]) { case 1: $res["mes"] = "上傳文件超過php配置文件中upload_max_filesize選項(xiàng)的值"; break; case 2: $res["mes"] = "超過了表單MMAX_FILE_SIZE限制的大小"; break; case 3: $res["mes"] = "文件部分被上傳"; break; case 4: $res["mes"] = "沒有選擇上傳文件"; break; case 6: $res["mes"] = "沒有找到臨時(shí)目錄"; break; case 7: $res["msg"] = "文件寫入失敗"; break; case 8: $res["mes"] = "系統(tǒng)錯(cuò)誤"; break; } return $res; } }
服務(wù)器接收上傳文件調(diào)用處理文件上傳函數(shù)upload_fun.php進(jìn)行處理:
"; $uploadFiles[] = $res["dest"]; } $uploadFiles = array_values(array_filter($uploadFiles)); print_r($uploadFiles);
$uploadFiles = array_values(array_filter($uploadFiles));這句主要是因?yàn)樯蟼鞫辔募r(shí)可能會(huì)有個(gè)別文件出錯(cuò)而上傳失敗導(dǎo)致$uploadFiles[]中的某個(gè)值是空值,所以我們需要對(duì)其進(jìn)行過濾并賦值給一個(gè)新數(shù)組
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22047.html
摘要:本篇文章就來分享一下兩款開箱即用上手容易的圖床相冊(cè)程序和在線文件管理器目錄列表程序,由好友開發(fā)并維護(hù),非常適合個(gè)人站長用作圖床相冊(cè)和文件下載分享。雖然說現(xiàn)在照片還有文件存儲(chǔ)等都可以上傳到網(wǎng)盤中,但是國內(nèi)的網(wǎng)盤與國外的網(wǎng)盤存儲(chǔ)還有點(diǎn)不一樣。以百度網(wǎng)盤與Dropbox對(duì)比為例,百度網(wǎng)盤頂多算是一個(gè)個(gè)人用來存放私人照片和文件的網(wǎng)絡(luò)硬盤,如果用來分享的話很容易被百度限制或者取消下載。很多的個(gè)人站長為...
摘要:鑒于上一篇上傳圖片到數(shù)據(jù)庫并可以進(jìn)行顯示鏈接描述有筆友提出了改進(jìn)意見,下面這篇文章就是采納改進(jìn)意見進(jìn)行修改的另外一種方案。結(jié)語本人剛接觸不久,自知能力不夠水平有限,該文中若存在什么不足或需改進(jìn)之處還請(qǐng)大家多多指正。 鑒于上一篇《PHP上傳圖片到數(shù)據(jù)庫并可以進(jìn)行顯示》鏈接描述有筆友提出了改進(jìn)意見,下面這篇文章就是采納改進(jìn)意見進(jìn)行修改的另外一種方案。 1、創(chuàng)建數(shù)據(jù)表 CREATE TABL...
摘要:版本修復(fù)提供多文件上傳,解決了以前不能多文件上傳問題,最大上傳圖片張,最大上傳附件,如果感覺時(shí)間不足可修改中的時(shí)間,現(xiàn)在是修復(fù)了文件同名上傳失敗的問題,解決方案是同名上傳覆蓋,即的方式修復(fù)了丟失的問題修改了上一版執(zhí)行安全漏洞還有個(gè)小就是上傳 1.0版本修復(fù)bug 提供多文件上傳,解決了以前不能多文件上傳問題,最大上傳圖片32張,最大上傳附件10,如果感覺時(shí)間不足可修改getToke...
一、文件上傳的html與PHP注意事項(xiàng)1.form要設(shè)定enctype屬性,method設(shè)置為post。enctype設(shè)置為multipart/form-data后,圖片上傳信息會(huì)被列入$_FILES超全局?jǐn)?shù)組,而非$_POST,從而達(dá)到真正的上傳目的2.設(shè)定隱藏input:表示最大上傳空間3.PHP配置文件的設(shè)置:showImg(https://segmentfault.com/img/bVTJ...
搭建個(gè)人云存儲(chǔ)一般會(huì)想到ownCloud,堪稱是自建云存儲(chǔ)服務(wù)的經(jīng)典。而Nextcloud是ownCloud原開發(fā)團(tuán)隊(duì)打造的號(hào)稱是下一代存儲(chǔ)。初一看覺得口氣不小,剛推出來就重新定義了Cloud,真正試用過后就由衷地贊同這個(gè)Nextcloud:它是個(gè)人云存儲(chǔ)服務(wù)的絕佳選擇。 與ownCloud相比,Nextcloud的功能絲毫沒有減弱,甚至由于可以安裝云存儲(chǔ)服務(wù)應(yīng)用,自制性更強(qiáng),也更符合用戶的...
閱讀 2792·2021-11-02 14:42
閱讀 3174·2021-10-08 10:04
閱讀 1198·2019-08-30 15:55
閱讀 1041·2019-08-30 15:54
閱讀 2330·2019-08-30 15:43
閱讀 1691·2019-08-29 15:18
閱讀 876·2019-08-29 11:11
閱讀 2375·2019-08-26 13:52