我们如何在yii2框架中保存图像?

时间:2014-06-26 05:07:52

标签: yii2

当我上传图片时,它会保存在/ web的默认文件夹中。我想将我的图像保存在用户定义的文件夹中。

6 个答案:

答案 0 :(得分:2)

如果它是一个用户定义的文件夹,很有可能你必须动态创建目录,UploadedFile方法不能这样做。对于Yii2,我会在" yii \ helpers \ BaseFileHelper"中使用createDirectory()方法。类。 例如:

use yii\web\UploadedFile;
use yii\helpers\BaseFileHelper;

$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

答案 1 :(得分:0)

如果您使用模型/活动表单提交表单(上传图片),这样的事情应该可以完成。关键部分是saveAs,其中第一个参数可以是文件路径。这也包括Yii Aliases

if (\Yii::$app->request->isPost) {
    $model->load(\Yii::$app->request->getBodyParams());
    $file = \yii\web\UploadedFile::getInstance($model, 'image');
    $file->saveAs('path/to/file');
}

同时深入了解UploadedFile课程。

答案 2 :(得分:0)

//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

答案 3 :(得分:0)

最好的方法是使用yii2文件包。 https://github.com/trntv/yii2-file-kit 更多功能

  • 文件上传小部件(基于Blueimp文件上传)
  • 用于存储文件的组件(构建在flysystem之上)
  • 下载,删除和查看(下载)文件的操作
  • 在模型中保存文件并删除模型时删除文件的行为

答案 4 :(得分:-1)

\Yii::$app->basePath对应于您的应用程序文件夹,例如\myapp\backend\。因此,如果您想将其保存到myapp\backend\data,请将其保存为

$file = \yii\web\UploadedFile::getInstance($model, 'logo');
$file->saveAs(\Yii::$app->basePath . '/data/'.$file);

答案 5 :(得分:-1)

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']);
    }
} 

它将我的图像保存在网络/上传文件夹中。