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