public function saveUploadedFile(array $routes, $rename = false)
{
$year = date('Y', time());
$month = date('m', time());
$structure = "{$routes['baseUrl']}/{$routes['uploadPath']}/{$year}/{$month}";
$basePath = Yii::getAlias($routes['basePath']);
$absolutePath = "{$basePath}/{$structure}";
// create actual directory structure "yyyy/mm"
if (!file_exists($absolutePath)) {
mkdir($absolutePath, 0777, true);
}
// get file instance
$this->file = UploadedFile::getInstance($this, 'file');
//if a file with the same name already exist append a number
$counter = 0;
do {
if ($counter == 0) {
$filename = Inflector::slug($this->file->baseName) . '.' . $this->file->extension;
} else {
//if we don't want to rename we finish the call here
if ($rename == false) {
return false;
}
$filename = Inflector::slug($this->file->baseName) . $counter . '.' . $this->file->extension;
}
$url = "{$structure}/{$filename}";
$counter++;
} while (self::findByUrl($url));
// checks for existing url in db
// save original uploaded file
$this->file->saveAs("{$absolutePath}/{$filename}");
$this->filename = $filename;
$this->type = $this->file->type;
$this->size = $this->file->size;
$this->url = $url;
return $this->save();
}
/** * Provides upload file * @return mixed */ public function actionUpload() { Yii::$app->response->format = Response::FORMAT_JSON; $model = new Mediafile(); $routes = $this->module->routes; $rename = $this->module->rename; $model->saveUploadedFile($routes, $rename); $bundle = FilemanagerAsset::register($this->view); if ($model->isImage()) { $model->createThumbs($routes, $this->module->thumbs); } $response['files'][] = ['url' => $model->url, 'thumbnailUrl' => $model->getDefaultThumbUrl($bundle->baseUrl), 'name' => $model->filename, 'type' => $model->type, 'size' => $model->file->size, 'deleteUrl' => Url::to(['file/delete', 'id' => $model->id]), 'deleteType' => 'POST']; return $response; }