摘要:前言將圖片上傳到阿里云是一種趨勢,一個必然。如果直接把圖片上傳到阿里云是比較簡單的,應(yīng)該很多人都懂,但是用百度上傳圖片到阿里云,就沒那么簡單了,所以我感覺還是有必要寫這篇文章分享出來,給有需要的人。
前言
將圖片上傳到阿里云OSS是一種趨勢,一個必然。當你的項目圖片過多,需要頻繁上傳和替換的時候,用阿里云OSS可以很方便的管理你的圖片,節(jié)省服務(wù)器空間,大大提高了效率。阿里云OSS是阿里云提供的海量、安全、低成本、高可靠的云存儲服務(wù)。你可以通過調(diào)用API,在任何應(yīng)用、任何時間、任何地點上傳和下載數(shù)據(jù),也可以通過Web控制臺對數(shù)據(jù)進行簡單的管理。阿里云OSS適合存放任意類型的文件,適合各種網(wǎng)站、開發(fā)企業(yè)及開發(fā)者使用。
如果直接把圖片上傳到阿里云OSS是比較簡單的,應(yīng)該很多人都懂,但是用百度UEditor上傳圖片到阿里云OSS,就沒那么簡單了,所以我感覺還是有必要寫這篇文章分享出來,給有需要的人。
效果圖 修改百度UEditor的文件1、修改這幾個文件:
1.1、修改Uploader.class.php文件
注意:修改的部分我有加注釋,注意看。
"臨時文件錯誤", "ERROR_TMP_FILE_NOT_FOUND" => "找不到臨時文件", "ERROR_SIZE_EXCEED" => "文件大小超出網(wǎng)站限制", "ERROR_TYPE_NOT_ALLOWED" => "文件類型不允許", "ERROR_CREATE_DIR" => "目錄創(chuàng)建失敗", "ERROR_DIR_NOT_WRITEABLE" => "目錄沒有寫權(quán)限", "ERROR_FILE_MOVE" => "文件保存時出錯", "ERROR_FILE_NOT_FOUND" => "找不到上傳文件", "ERROR_WRITE_CONTENT" => "寫入文件內(nèi)容錯誤", "ERROR_UNKNOWN" => "未知錯誤", "ERROR_DEAD_LINK" => "鏈接不可用", "ERROR_HTTP_LINK" => "鏈接不是http鏈接", "ERROR_HTTP_CONTENTTYPE" => "鏈接contentType不正確" ); /** * 構(gòu)造函數(shù) * @param string $fileField 表單名稱 * @param array $config 配置項 * @param bool $base64 是否解析base64編碼,可省略。若開啟,則$fileField代表的是base64編碼的字符串表單名 */ public function __construct($fileField, $config, $type = "upload") { $this->fileField = $fileField; $this->config = $config; $this->type = $type; if ($type == "remote") { $this->saveRemote(); } else if($type == "base64") { $this->upBase64(); } else { $this->upFile(); } $this->stateMap["ERROR_TYPE_NOT_ALLOWED"] = iconv("unicode", "utf-8", $this->stateMap["ERROR_TYPE_NOT_ALLOWED"]); } /** * 上傳文件的主處理方法 * @return mixed */ private function upFile() { $file = $this->file = $_FILES[$this->fileField]; if (!$file) { $this->stateInfo = $this->getStateInfo("ERROR_FILE_NOT_FOUND"); return; } if ($this->file["error"]) { $this->stateInfo = $this->getStateInfo($file["error"]); return; } else if (!file_exists($file["tmp_name"])) { $this->stateInfo = $this->getStateInfo("ERROR_TMP_FILE_NOT_FOUND"); return; } else if (!is_uploaded_file($file["tmp_name"])) { $this->stateInfo = $this->getStateInfo("ERROR_TMPFILE"); return; } //修改:上傳阿里云OSS $upload=new sourcecorewidgetsuploadFileUpload(); $Pictureinfo=$upload->UploadUeditorPicture($file); $this->oriName = $file["name"]; $this->fileSize = $file["size"]; $this->fileType = $this->getFileExt(); $this->fullName = "/".$Pictureinfo["path"]; $this->filePath = $Pictureinfo["path"]; $this->fileName = $this->getFileName(); $dirname = dirname($this->filePath); //檢查文件大小是否超出限制 if (!$this->checkSize()) { $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED"); return; } //檢查是否不允許的文件格式 if (!$this->checkType()) { $this->stateInfo = $this->getStateInfo("ERROR_TYPE_NOT_ALLOWED"); return; } //創(chuàng)建目錄失敗 // if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) { // $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR"); // return; // } else if (!is_writeable($dirname)) { // $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE"); // return; // } $this->stateInfo = $this->stateMap[0]; //移動文件 // if (!(move_uploaded_file($file["tmp_name"], $this->filePath) && file_exists($this->filePath))) { //移動失敗 // $this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE"); // } else { //移動成功 // $this->stateInfo = $this->stateMap[0]; // } } /** * 處理base64編碼的圖片上傳 * @return mixed */ private function upBase64() { $base64Data = $_POST[$this->fileField]; $img = base64_decode($base64Data); $this->oriName = $this->config["oriName"]; $this->fileSize = strlen($img); $this->fileType = $this->getFileExt(); $this->fullName = $this->getFullName(); $this->filePath = $this->getFilePath(); $this->fileName = $this->getFileName(); $dirname = dirname($this->filePath); //檢查文件大小是否超出限制 if (!$this->checkSize()) { $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED"); return; } //創(chuàng)建目錄失敗 if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) { $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR"); return; } else if (!is_writeable($dirname)) { $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE"); return; } //移動文件 if (!(file_put_contents($this->filePath, $img) && file_exists($this->filePath))) { //移動失敗 $this->stateInfo = $this->getStateInfo("ERROR_WRITE_CONTENT"); } else { //移動成功 $this->stateInfo = $this->stateMap[0]; } } /** * 拉取遠程圖片 * @return mixed */ private function saveRemote() { $imgUrl = htmlspecialchars($this->fileField); $imgUrl = str_replace("&", "&", $imgUrl); //http開頭驗證 if (strpos($imgUrl, "http") !== 0) { $this->stateInfo = $this->getStateInfo("ERROR_HTTP_LINK"); return; } //獲取請求頭并檢測死鏈 $heads = get_headers($imgUrl); if (!(stristr($heads[0], "200") && stristr($heads[0], "OK"))) { $this->stateInfo = $this->getStateInfo("ERROR_DEAD_LINK"); return; } //格式驗證(擴展名驗證和Content-Type驗證) $fileType = strtolower(strrchr($imgUrl, ".")); if (!in_array($fileType, $this->config["allowFiles"]) || stristr($heads["Content-Type"], "image")) { $this->stateInfo = $this->getStateInfo("ERROR_HTTP_CONTENTTYPE"); return; } //打開輸出緩沖區(qū)并獲取遠程圖片 ob_start(); $context = stream_context_create( array("http" => array( "follow_location" => false // don"t follow redirects )) ); readfile($imgUrl, false, $context); $img = ob_get_contents(); ob_end_clean(); preg_match("/[/]([^/]*)[.]?[^./]*$/", $imgUrl, $m); $this->oriName = $m ? $m[1]:""; $this->fileSize = strlen($img); $this->fileType = $this->getFileExt(); $this->fullName = $this->getFullName(); $this->filePath = $this->getFilePath(); $this->fileName = $this->getFileName(); $dirname = dirname($this->filePath); //檢查文件大小是否超出限制 if (!$this->checkSize()) { $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED"); return; } //創(chuàng)建目錄失敗 if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) { $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR"); return; } else if (!is_writeable($dirname)) { $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE"); return; } //移動文件 if (!(file_put_contents($this->filePath, $img) && file_exists($this->filePath))) { //移動失敗 $this->stateInfo = $this->getStateInfo("ERROR_WRITE_CONTENT"); } else { //移動成功 $this->stateInfo = $this->stateMap[0]; } } /** * 上傳錯誤檢查 * @param $errCode * @return string */ private function getStateInfo($errCode) { return !$this->stateMap[$errCode] ? $this->stateMap["ERROR_UNKNOWN"] : $this->stateMap[$errCode]; } /** * 獲取文件擴展名 * @return string */ private function getFileExt() { return strtolower(strrchr($this->oriName, ".")); } /** * 重命名文件 * @return string */ private function getFullName() { //替換日期事件 $t = time(); $d = explode("-", date("Y-y-m-d-H-i-s")); $format = $this->config["pathFormat"]; $format = str_replace("{yyyy}", $d[0], $format); $format = str_replace("{yy}", $d[1], $format); $format = str_replace("{mm}", $d[2], $format); $format = str_replace("{dd}", $d[3], $format); $format = str_replace("{hh}", $d[4], $format); $format = str_replace("{ii}", $d[5], $format); $format = str_replace("{ss}", $d[6], $format); $format = str_replace("{time}", $t, $format); //過濾文件名的非法自負,并替換文件名 $oriName = substr($this->oriName, 0, strrpos($this->oriName, ".")); $oriName = preg_replace("/[|?"<>/*]+/", "", $oriName); $format = str_replace("{filename}", $oriName, $format); //替換隨機字符串 $randNum = rand(1, 10000000000) . rand(1, 10000000000); if (preg_match("/{rand:([d]*)}/i", $format, $matches)) { $format = preg_replace("/{rand:[d]*}/i", substr($randNum, 0, $matches[1]), $format); } $ext = $this->getFileExt(); return $format . $ext; } /** * 獲取文件名 * @return string */ private function getFileName () { return substr($this->filePath, strrpos($this->filePath, "/") + 1); } /** * 獲取文件完整路徑 * @return string */ private function getFilePath() { $fullname = $this->fullName; // $rootPath = $_SERVER["DOCUMENT_ROOT"]; // if (substr($fullname, 0, 1) != "/") { // $fullname = "/" . $fullname; // } //修改:替換路徑 return $fullname; } /** * 文件類型檢測 * @return bool */ private function checkType() { return in_array($this->getFileExt(), $this->config["allowFiles"]); } /** * 文件大小檢測 * @return bool */ private function checkSize() { return $this->fileSize <= ($this->config["maxSize"]); } /** * 獲取當前上傳成功文件的各項信息 * @return array */ public function getFileInfo() { return array( "state" => $this->stateInfo, "url" => $this->fullName, "title" => $this->fileName, "original" => $this->oriName, "type" => $this->fileType, "size" => $this->fileSize ); } }
1.2、修改config.json文件,這個文件主要是修改圖片路徑,改為你的阿里云OSS的路徑
/* 前后端通信相關(guān)的配置,注釋只允許使用多行方式 */ { /* 上傳圖片配置項 */ "imageActionName": "uploadimage", /* 執(zhí)行上傳圖片的action名稱 */ "imageFieldName": "upfile", /* 提交的圖片表單名稱 */ "imageMaxSize": 2048000, /* 上傳大小限制,單位B */ "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上傳圖片格式顯示 */ "imageCompressEnable": true, /* 是否壓縮圖片,默認是true */ "imageCompressBorder": 1600, /* 圖片壓縮最長邊限制 */ "imageInsertAlign": "none", /* 插入的圖片浮動方式 */ "imageUrlPrefix": "http://test.oss-cn-hangzhou.aliyuncs.com", /* 圖片訪問路徑前綴 */ "imagePathFormat": "data/attachment/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ /* {filename} 會替換成原文件名,配置這項需要注意中文亂碼問題 */ /* {rand:6} 會替換成隨機數(shù),后面的數(shù)字是隨機數(shù)的位數(shù) */ /* {time} 會替換成時間戳 */ /* {yyyy} 會替換成四位年份 */ /* {yy} 會替換成兩位年份 */ /* {mm} 會替換成兩位月份 */ /* {dd} 會替換成兩位日期 */ /* {hh} 會替換成兩位小時 */ /* {ii} 會替換成兩位分鐘 */ /* {ss} 會替換成兩位秒 */ /* 非法字符 : * ? " < > | */ /* 具請體看線上文檔: fex.baidu.com/ueditor/#use-format_upload_filename */ /* 涂鴉圖片上傳配置項 */ "scrawlActionName": "uploadscrawl", /* 執(zhí)行上傳涂鴉的action名稱 */ "scrawlFieldName": "upfile", /* 提交的圖片表單名稱 */ "scrawlPathFormat": "data/attachment/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ "scrawlMaxSize": 2048000, /* 上傳大小限制,單位B */ "scrawlUrlPrefix": "http://test.oss-cn-hangzhou.aliyuncs.com", /* 圖片訪問路徑前綴 */ "scrawlInsertAlign": "none", /* 截圖工具上傳 */ "snapscreenActionName": "uploadimage", /* 執(zhí)行上傳截圖的action名稱 */ "snapscreenPathFormat": "/data/attachment/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ "snapscreenUrlPrefix": "http://test.oss-cn-hangzhou.aliyuncs.com", /* 圖片訪問路徑前綴 */ "snapscreenInsertAlign": "none", /* 插入的圖片浮動方式 */ /* 抓取遠程圖片配置 */ "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"], "catcherActionName": "catchimage", /* 執(zhí)行抓取遠程圖片的action名稱 */ "catcherFieldName": "source", /* 提交的圖片列表表單名稱 */ "catcherPathFormat": "/data/attachment/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ "catcherUrlPrefix": "http://test.oss-cn-hangzhou.aliyuncs.com", /* 圖片訪問路徑前綴 */ "catcherMaxSize": 2048000, /* 上傳大小限制,單位B */ "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取圖片格式顯示 */ /* 上傳視頻配置 */ "videoActionName": "uploadvideo", /* 執(zhí)行上傳視頻的action名稱 */ "videoFieldName": "upfile", /* 提交的視頻表單名稱 */ "videoPathFormat": "/data/attachment/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ "videoUrlPrefix": "http://test.oss-cn-hangzhou.aliyuncs.com", /* 視頻訪問路徑前綴 */ "videoMaxSize": 102400000, /* 上傳大小限制,單位B,默認100MB */ "videoAllowFiles": [ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上傳視頻格式顯示 */ /* 上傳文件配置 */ "fileActionName": "uploadfile", /* controller里,執(zhí)行上傳視頻的action名稱 */ "fileFieldName": "upfile", /* 提交的文件表單名稱 */ "filePathFormat": "/data/attachment/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ "fileUrlPrefix": "http://test.oss-cn-hangzhou.aliyuncs.com", /* 文件訪問路徑前綴 */ "fileMaxSize": 51200000, /* 上傳大小限制,單位B,默認50MB */ "fileAllowFiles": [ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" ], /* 上傳文件格式顯示 */ /* 列出指定目錄下的圖片 */ "imageManagerActionName": "listimage", /* 執(zhí)行圖片管理的action名稱 */ "imageManagerListPath": "/data/attachment/image/", /* 指定要列出圖片的目錄 */ "imageManagerListSize": 20, /* 每次列出文件數(shù)量 */ "imageManagerUrlPrefix": "http://test.oss-cn-hangzhou.aliyuncs.com", /* 圖片訪問路徑前綴 */ "imageManagerInsertAlign": "none", /* 插入的圖片浮動方式 */ "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件類型 */ /* 列出指定目錄下的文件 */ "fileManagerActionName": "listfile", /* 執(zhí)行文件管理的action名稱 */ "fileManagerListPath": "/data/attachment/file/", /* 指定要列出文件的目錄 */ "fileManagerUrlPrefix": "http://test.oss-cn-hangzhou.aliyuncs.com", /* 文件訪問路徑前綴 */ "fileManagerListSize": 20, /* 每次列出文件數(shù)量 */ "fileManagerAllowFiles": [ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" ] /* 列出的文件類型 */ }
1.3、action_upload.php、action_list.php、action_crawler.php這三個文件主要是引用上傳到阿里云OSS的文件FileUpload.php,都加入如下代碼即可
include (__DIR__."/../../../../../../source/core/widgets/upload/FileUpload.php");FileUpload.php文件上傳到阿里云OSS的代碼
1,"modules_name"=>"ueditor","user_id"=>1]; $model = array(); $bucket = "test"; if(empty($data["id"])){ $model["status"]="ID不能為空"; return $model; } if(!isset($data["modules_name"])){ $model["status"]="模塊名稱不能為空"; return $model; } if(!isset($data["user_id"])){ $model["status"]="用戶id不能為空"; return $model; } $path = self::Encrypt($data["modules_name"],$data["id"],$data["user_id"]);//對上傳的路徑加密 if(!empty($file)){ $randName = time() . rand(1000, 9999) . strtolower(strrchr($file["name"], ".")); $name = $path.$randName; $tempName=!empty($file["tmp_name"])?$file["tmp_name"]:""; $ossClient->uploadFile($bucket,$name,$tempName); return ["path"=>$name,"randName"=>$randName]; } return ["path"=>"","randName"=>""]; } /** * 刪除附件 * * @param path string y upload表返回的附件上傳路徑path 字段 * @return status string 結(jié)果信息 */ static public function DownloadDelete($path) { $ossClient = new OssClient(self::accessKeyId, self::accessKeySecret, self::endpoint); $bucket = "test"; if(!isset($path)){ $model["status"]="附件路徑不能為空"; return $model; } $ossClient->deleteObject($bucket, $path); $model["status"]="刪除成功"; return $model; } /** * 批量刪除附件 * * @param path string y upload表返回的附件上傳路徑path 字段 * @return status string 結(jié)果信息 */ static public function DownloadDeletes($data) { $ossClient = new OssClient(self::accessKeyId, self::accessKeySecret, self::endpoint); $bucket = "test"; if(!isset($data)){ $model["status"]="刪除數(shù)組不能為空"; return $model; } $ossClient->deleteObjects($bucket, $data); $model["status"]="刪除成功"; return $model; } function getObject($object) { $ossClient = new OssClient(self::accessKeyId, self::accessKeySecret, self::endpoint); $options = array(); $bucket = "test"; $timeout = 3600; $options = NULL; try { $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT"); } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED "); printf($e->getMessage() . " "); return; } print(__FUNCTION__ . ": signedUrl: " . $signedUrl . " "); $content = file_get_contents(__FILE__); $request = new RequestCore($signedUrl); $request->set_method("PUT"); $request->add_header("Content-Type", ""); $request->add_header("Content-Length", strlen($content)); $request->set_body($content); $request->send_request(); $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code()); if ($res->isOK()) { print(__FUNCTION__ . ": OK" . " "); } else { print(__FUNCTION__ . ": FAILED" . " "); }; } /** * 加密路徑 * * @param array $data Y 參數(shù)數(shù)組(array("modules_name"=>$modules_name,"bucket"=>"test","path"=>"upload/accessory/14585506176746.jpg")) * --modules_name string Y 模塊名稱 * --id string Y id * @return status string 結(jié)果信息 */ static public function Encrypt($modules_name,$id,$user_id="") { if(empty($user_id)){ $user_id = Yii::$app->user->id; } $modules_path = AesMask::encrypt($modules_name,"test"); $id_path = AesMask::encrypt($id,"test"); return "test/".$modules_path."/".$id_path."/"; } } ?>新增圖片Controller的代碼
public function actionCreate() { $username=!empty(Yii::$app->user->identity->attributes["username"])?Yii::$app->user->identity->attributes["username"]:""; $model = new Product(); $model->user_id=Yii::$app->user->id; $model->user_name = $username; $model->product_type=$this->product_type; $model->loadDefaultValues(); $bodyModel = $this->getBodyModel(); $bodyModel->loadDefaultValues(); if(($r = $this->saveProduct($model, $bodyModel))!==false) { return $r; } //產(chǎn)品屬性 $product_items=[]; return $this->render("create", [ "model" => $model, "bodyModel" => $bodyModel, "product_items"=>$product_items, ]); } public function saveProduct($model, $bodyModel) { $postDatas = Yii::$app->request->post(); if ($model->load($postDatas) && $bodyModel->load($postDatas) && $model->validate() && $bodyModel->validate()) { if($model->summary===null|| $model->summary ==="") { if($bodyModel->hasAttribute("body")) { $product = strip_tags($bodyModel->body); $pattern = "/s/";//去除空白 $product = preg_replace($pattern, "", $product); $model->summary=StringHelper::subStr($product,250); } } if($model->save()) { $bodyModel->product_id = $model->id; $bodyModel->save(); //保存百度編輯器的圖片 $this->saveUpload($bodyModel->body,$model->id); //屬性 if(!empty($postDatas["ProductItems"])){ ProductItems::deleteAll(["product_id"=>$model->id]); foreach ($postDatas["ProductItems"]["type"] as $key => $val) { $modelItems = new ProductItems(); $modelItems->product_id = $model->id; $modelItems->type = !empty($postDatas["ProductItems"]["type"][$key])?$postDatas["ProductItems"]["type"][$key]:""; $modelItems->source = !empty($postDatas["ProductItems"]["source"][$key])?$postDatas["ProductItems"]["source"][$key]:""; $modelItems->ticket_pat = !empty($postDatas["ProductItems"]["ticket_pat"][$key])?$postDatas["ProductItems"]["ticket_pat"][$key]:""; $modelItems->ticket_pats = !empty($postDatas["ProductItems"]["ticket_pats"][$key])?$postDatas["ProductItems"]["ticket_pats"][$key]:""; $modelItems->save(); } } return $this->redirect(["index"]); } } return false; } //保存圖片 public function saveUpload($body,$task_id) { $error["status"]="內(nèi)容為空"; if(!empty($body) && $task_id){ $preg = "/新增圖片Views的代碼/i"; //獲取百度編輯器里提交的圖片路徑 preg_match_all($preg, $body, $imgArr); if(!empty($imgArr[1])){ foreach ($imgArr[1] as $key => $val) { $_imgArr = explode("/wpzx/", $val); $path="wpzx/".$_imgArr[1]; $suffix = pathinfo($_imgArr[1]); $img_info = getimagesize($val); $model= new Upload(); if($suffix["extension"] == "jpg" || $suffix["extension"] == "JPG"|| $suffix["extension"] == "png"|| $suffix["extension"] == "PNG"|| $suffix["extension"] == "jpeg"){ $model->thumb = $path; } $model->task_id = $task_id; $model->name = $suffix["basename"]; $model->path = $path; $model->status = 1; $model->user_id = Yii::$app->user->id; $model->size = $img_info[0]*$img_info[1]; $model->type = $img_info["mime"]; $model->upload_time = time(); $model->module_id = 3; $model->modules_name = "product"; $model->target = 1; if (!$model->save()) { $error["status"]="失敗"; } } if($error["status"]!="失敗"){ return true; } return $error; } } //刪除upload與阿里云的圖片 $upload=Upload::getUploadsAll($task_id,"product"); if(!empty($upload)){ FileUpload::DownloadDeletes(ArrayHelper::getColumn($upload, "path")); Upload::deleteAll(["task_id"=>$task_id,"modules_name"=>"product"]); } } //根據(jù)指定條件獲取所有上傳圖片 public static function getUploadsAll($task_id,$modules_name) { $data=[]; $query=Upload::find()->where(["modules_name"=>$modules_name]); if(!empty($task_id)){ $data=$query->andWhere(["task_id"=>$task_id])->all(); }else{ $data=$query->all(); } return $data; } //upload表的字段如下,僅供參考 public function attributeLabels() { return [ "id" => "ID", "name" => "上傳文件名", "path" => "文件路徑", "status" => "上傳狀態(tài)", "task_id" => "所屬任務(wù)", "user_id" => "所屬用戶", "size" => "文件大小", "type" => "文件類型", "upload_time" => "上傳時間", "module_id" => "所屬系統(tǒng)", "thumb" => "縮略圖", ]; }
"{label}{input} {error}", "labelOptions" => [ "class" => "control-label" ] ] ; $takonomies = Takonomy::getArrayTree("product"); $options = Common::buildTreeOptions($takonomies, $model->takonomy_id); ?>總結(jié)分析[ "enctype"=>"multipart/form-data", ], "fieldConfig" => [ "template" => "{label}{input}{error}", "labelOptions" => [ "class" => "col-md-4 control-label no-padding-left no-padding-right align-left" ] ], ]); ?>= $form->field($model, "title",$filedOptions)->textInput(["maxlength" => 256,"placeholder"=>"請輸入標題"])?> = $form->field($model, "url_alias",$filedOptions)->textInput(["maxlength" => 128,"placeholder"=>"Url 地址"])?>
=$form->field($bodyModel, "body",$filedOptions)->widget(Ueditor::className(),[ "options"=>[ "focus"=>true, "toolbars"=> [ ["fullscreen", "source", "|", "undo", "redo", "|", "bold", "italic", "underline","removeformat","autotypeset", "|", "forecolor", "backcolor", "selectall", "cleardoc","|","fontfamily", "fontsize", "|", "justifyleft", "justifycenter", "|", "link", "unlink","|", "insertimage", "emotion","attachment","|", "preview", "searchreplace"] ], ], "attributes"=>[ "style"=>"height:80px" ] ])?>= Html::submitButton($model->isNewRecord ? "新建" : "編輯", ["class" => $model->isNewRecord ? "btn btn-success" : "btn btn-primary"])?>
1、要修改的地方還是挺多的,百度UEditor上傳后獲取圖片路徑保存到數(shù)據(jù)庫處理起來也有點繁瑣,如果你們有更好的方法,可以給我留言,咱們一塊討論。
2、以上我只是處理了圖片上傳到阿里云OSS,如果大家需要把視頻,Mp3等等附件上傳到阿里云OSS也是同樣的方法,唯一的區(qū)別就是在提交表單的時候要獲取到對應(yīng)的視頻,Mp3等等附件路徑保存到數(shù)據(jù)庫得處理一下。
相關(guān)資料 PHP-SDK 下載安裝地址
ueditor 下載地址
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/25863.html
摘要:筆主很早就開始用阿里云存儲服務(wù)當做自己的圖床了。阿里云對象存儲文檔,本篇文章會介紹到整合阿里云存儲服務(wù)實現(xiàn)文件上傳下載以及簡單的查看。 Github 地址:https://github.com/Snailclimb/springboot-integration-examples(SpringBoot和其他常用技術(shù)的整合,可能是你遇到的講解最詳細的學習案例,力爭新手也能看懂并且能夠在看完...
摘要:找到頭像下面的添加一個的樣式類將內(nèi)容改變成上傳成功并且顯示上傳成功文件上傳失敗,同樣是添加找到頭像下面的添加一個的樣式類將內(nèi)容改變成上傳失敗并且顯示上傳失敗完成上傳完了,成功或者失敗,先刪除進度條。 是這個功能的最后一步了,新增插件:layer.js 彈窗層組件jquery.form 異步表單提交插件 新增CSS:layer擴展文件 修改layer彈窗的皮膚,默認的不喜歡!基本代碼和之...
摘要:找到頭像下面的添加一個的樣式類將內(nèi)容改變成上傳成功并且顯示上傳成功文件上傳失敗,同樣是添加找到頭像下面的添加一個的樣式類將內(nèi)容改變成上傳失敗并且顯示上傳失敗完成上傳完了,成功或者失敗,先刪除進度條。 是這個功能的最后一步了,新增插件:layer.js 彈窗層組件jquery.form 異步表單提交插件 新增CSS:layer擴展文件 修改layer彈窗的皮膚,默認的不喜歡!基本代碼和之...
摘要:找到頭像下面的添加一個的樣式類將內(nèi)容改變成上傳成功并且顯示上傳成功文件上傳失敗,同樣是添加找到頭像下面的添加一個的樣式類將內(nèi)容改變成上傳失敗并且顯示上傳失敗完成上傳完了,成功或者失敗,先刪除進度條。 是這個功能的最后一步了,新增插件:layer.js 彈窗層組件jquery.form 異步表單提交插件 新增CSS:layer擴展文件 修改layer彈窗的皮膚,默認的不喜歡!基本代碼和之...
摘要:找到頭像下面的添加一個的樣式類將內(nèi)容改變成上傳成功并且顯示上傳成功文件上傳失敗,同樣是添加找到頭像下面的添加一個的樣式類將內(nèi)容改變成上傳失敗并且顯示上傳失敗完成上傳完了,成功或者失敗,先刪除進度條。 是這個功能的最后一步了,新增插件:layer.js 彈窗層組件jquery.form 異步表單提交插件 新增CSS:layer擴展文件 修改layer彈窗的皮膚,默認的不喜歡!基本代碼和之...
閱讀 3034·2023-04-26 03:01
閱讀 3538·2023-04-25 19:54
閱讀 1592·2021-11-24 09:39
閱讀 1374·2021-11-19 09:40
閱讀 4250·2021-10-14 09:43
閱讀 2062·2019-08-30 15:56
閱讀 1490·2019-08-30 13:52
閱讀 1660·2019-08-29 13:05