'media/product', // media/product 'article' => 'media/news', // media/news 'brand' => 'media/brand', 'category' => 'media/category', 'banner' => 'media/banner', 'lib' => 'media/lib/', 'user_upload' => 'media/user_upload', ]; public function __construct($user_id) { $this->user_id = $user_id; } /** * @description: an implementation of start method to upload an item's image * @param $item_type string * @param $content string * @param $file_name string * @return array | boolean */ public function uploadFile($item_type, $file_name, $content, $set_target_path = '') { //$file_name = substr(strrchr($img_url, "/"), 1); //$content = get_url_content($img_url); $header_setting = [ // 'Authorization' => "Basic ". base64_encode(API_KEY), ]; if($set_target_path) { $target_path = $set_target_path; }else{ $target_path = (isset($this->target_path_item_type_mapping[$item_type])) ? $this->target_path_item_type_mapping[$item_type] : ''; } $multipart_settings = [ [ 'name' => 'upload_method', 'contents' => 'content', ], [ 'name' => 'file_name', 'contents' => $file_name, ], [ 'name' => 'target_path', 'contents' => $target_path, ], [ 'name' => 'file_content', 'contents' => $content, ], //for upload server [ 'name' => 'uid', 'contents' => $this->user_id, ], [ 'name' => 'time', 'contents' => CURRENT_TIME, ], [ 'name' => 'token', 'contents' => $this->createToken($this->user_id, CURRENT_TIME), ], [ 'name' => 'item_type', 'contents' => $item_type , ], ]; return $this->start($header_setting, $multipart_settings); } /* let settings = { element : '',//element id to click on holder : '', //id file holder form_name : '', item_type : '', item_id : '', file_type : '', //what is the file type: doc, photo, video ? file_field : '', //what field in the item table this file is used for ? resize : '200,400,600' //sizes to resize square: '200,400', //sizes to be square keep_width : '400', //sizes to keep the width max_file: 1 } */ /** * @description: a general method for upload * @param array $header_setting * @param array $multipart_settings * @return array | boolean * @throws \GuzzleHttp\Exception\GuzzleException */ protected function start(array $header_setting = [], array $multipart_settings = []) { $client = new \GuzzleHttp\Client(); $request = $client->request('POST', $this->upload_handle, [ 'headers' => $header_setting, 'multipart' => $multipart_settings ]); return $request->getBody()->getContents(); } // return string | boolean protected function getAssetType($file_name) { $ext = strtolower(strrchr($file_name, ".")); if( $ext == '.css') return 'css'; if( $ext == '.js') return 'js'; if( \in_array($ext, ['.jpg', '.jpeg', '.gif', '.png', '.ico'])) return 'image'; return false; } // this salt and createToken must be the same ones as in Hura8/Base/CDNFileUploadHandle // and different per project (or else others will use it to upload forbidden files on our clients' hosting) const SECURITY_SALT = 'ahss@3asdaaSDFSD'; protected function createToken($id, $time) { return sha1(join("-", [$id , $time , static::SECURITY_SALT])); } }