#yii2
#yii2
Вопрос:
Когда я загружаю изображение, оно сохраняется в папке по умолчанию, которая называется /web . Я хочу сохранить свои изображения в пользовательской папке.
Ответ №1:
Если это пользовательская папка, скорее всего, вам придется создавать каталог «на лету», чего не делает метод UploadedFile. Для Yii2 я бы использовал метод CreateDirectory() в классе «yii helpers BaseFileHelper». например:
use yiiwebUploadedFile;
use yiihelpersBaseFileHelper;
$model->uploaded_file = UploadedFile::getInstance($model, 'uploaded_file');
$unique_name = uniqid('file_');
$model->file_type = $model->uploaded_file->extension;
$model->file_name = $unique_name.'.'.$model->file_type;
$model->file_path = 'uploads/projects/'. $project_id;
BaseFileHelper::createDirectory($model->file_path);
$model->uploaded_file->saveAs($model->file_path .'/'. $model->file_name);
$model->save();
Проверьте CreateDirectory
Ответ №2:
Что-то вроде этого должно выполнить эту работу, если вы используете model / active form для отправки формы (загрузки изображения). Ключевой частью является SaveAs, где первым параметром может быть путь к файлу. Сюда входят также псевдонимы Yii.
if (Yii::$app->request->isPost) {
$model->load(Yii::$app->request->getBodyParams());
$file = yiiwebUploadedFile::getInstance($model, 'image');
$file->saveAs('path/to/file');
}
Также более подробно изучите класс UploadedFile.
Комментарии:
1. спасибо за ваше предложение, но теперь я знаю, как изменить path.. мы можем использовать chdir(‘путь к папке’); и это изменит наш каталог по умолчанию на определяемый пользователем каталог. В YII2
Ответ №3:
//yii 1.1 example
if($file=CUploadedFile::getInstanceByName("Shorty[avatar]"))
{
$basepath = preg_replace('~([\]|[/])protected~s','',Yii::app()->basePath);
$filename = $basepath ."/images/shorty_images/" . $shorty_model->id . "/";
if(!file_exists($filename))
if(!mkdir($basepath ."/images/shorty_images/" . $shorty_model->id, 0777, true))
throw new CHttpException(404,'Directory create error!');
$status = $file->saveAs($filename . iconv("UTF-8", "ASCII//IGNORE", $file->name));
}
Yii 2: http://www.yiiframework.com/doc-2.0/yii-web-uploadedfile.html
Комментарии:
1. Можете ли вы сказать мне, как это сделать в yii2. Я столкнулся с некоторой проблемой в yii2
Ответ №4:
Лучший способ — использовать yii2 file kit. https://github.com/trntv/yii2-file-kit Это еще одна особенность
- Виджет загрузки файлов (на основе загрузки файлов Blueimp)
- Компонент для хранения файлов (встроенный поверх flysystem)
- Действия для загрузки, удаления и просмотра (загрузки) файлов
- Поведение для сохранения файлов в модели и удаления файлов при удалении модели
Ответ №5:
if ($model->load(Yii::$app->request->post())) {
$model->password=md5($model->password);
$model->photo = UploadedFile::getInstance($model, 'photo');
if($model->validate()){
$model->photo->saveAs('uploads/' . $model->photo->baseName . '.' . $model->photo->extension);
$model->save();
return $this->redirect(['index']);
}
}
Он сохраняет мои изображения в папке web / uploads.
Ответ №6:
Yii::$app->basePath
соответствует папке вашего приложения, например myappbackend
.Поэтому, если вы хотите сохранить его myappbackenddata
, сохраните его как
$file = yiiwebUploadedFile::getInstance($model, 'logo');
$file->saveAs(Yii::$app->basePath . '/data/'.$file);