Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在yii2高级模板中上载根文件夹中的文件?_Yii2_Yii2 Advanced App - Fatal编程技术网

如何在yii2高级模板中上载根文件夹中的文件?

如何在yii2高级模板中上载根文件夹中的文件?,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,我无法上载根文件夹中的文件 我上传了根文件夹中的文件,并在前端和后端访问这些文件 应用程序。使用高级模板时,您需要选择一个公共位置来存储文件,前端和后端应用程序都可以访问这些文件,此外,如果您希望通过web公开访问这些文件,则需要确保此位置为公用文件夹 我倾向于使用前端/web文件夹作为我的公共上载位置。从后端上传时,我会写入此位置。然后我可以使用前端的图像 从后端上传的示例 UploadForm.php 创建一个模型来管理上传数据,确保包含文件属性 class UploadForm exten

我无法上载根文件夹中的文件

我上传了根文件夹中的文件,并在前端和后端访问这些文件
应用程序。

使用高级模板时,您需要选择一个公共位置来存储文件,前端和后端应用程序都可以访问这些文件,此外,如果您希望通过web公开访问这些文件,则需要确保此位置为公用文件夹

我倾向于使用前端/web文件夹作为我的公共上载位置。从后端上传时,我会写入此位置。然后我可以使用前端的图像

从后端上传的示例

UploadForm.php

创建一个模型来管理上传数据,确保包含文件属性

class UploadForm extends Model
{
    /**
     * @var UploadedFile file attribute
     */
    public $file;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            [['file'], 'file', 'extensions'=>'jpg, gif, png'],
        ];
    }
}
上传控制器

在将管理上载的控制器中,使用前端的别名设置上载路径
$path=Yii::getAlias('@frontend')。/web/uploads/'

class MediaController extends Controller
{

    public function actionIndex()
    {

        $model = new UploadForm();

        //Set the path that the file will be uploaded to
        $path = Yii::getAlias('@frontend') .'/web/upload/'

        if (Yii::$app->request->isPost) {
            $model->file = UploadedFile::getInstance($model, 'file');

            if ($model->file && $model->validate()) {
                $model->file->saveAs($path . $model->file->baseName . '.' . $model->file->extension);
            }
        }

        return $this->renderPartial('index', ['model' => $model]);

    }
}
查看表单

将表单添加到视图中,请确保设置
“多部分/表单数据”
enctype,以便它可以接受文件上载

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']) ?>

    <?= $form->field($model, 'file')->fileInput(); ?>

    <?= Html::submitButton('Upload') ?>

<?php ActiveForm::end() ?>

前端

然后可以通过/upload/{image name}.{extension}访问前端的图像。示例


注意:最好将上载路径存储在common/config/params.php中,这样您就可以从前端和后端进行访问。

以下是图像上载、更新和删除的完整解决方案。 请仔细遵循这些步骤

1在根目录中创建
上载
文件夹。
Yii2中的2个根别名
打开common/config/bootstrap.php并将这一行添加到文件顶部

Yii::setAlias('@root', realpath(dirname(__FILE__).'/../../'));

---
3型号: 4文件输入 编辑: 6在Gridview中显示(后端) 7在详细视图中显示(后端) 如果您已隐藏前端/web,请将此规则添加到项目根目录中(yii2 app)。htaccess文件:

RewriteEngine on

  RewriteCond %{REQUEST_URI} /(uploads)
  RewriteRule ^uploads/(.*)$ uploads/$1 [L]
在前端显示图像
image;?>">

也许你不能上传到根文件夹,但无论如何你都可以从前端和后端访问文件,这取决于你如何在产品上配置你的URL。如果你在linux中,你需要在
chown-R www-data:www-data/root中访问apache-to-root文件夹
你真的遇到了/root文件夹还是你指的是“应用程序的root“(主)文件夹?@Bharat-下面的答案是写你可以从前端/web/upload文件夹中的后端上传你的文件,你可以访问上面上传的图像frontend@zazu我得到了这个错误:
finfo_文件(/tmp/phpGjxsrP):无法打开流:没有这样的文件或目录
。这是权限问题吗?我如何授予
tmp
目录的权限。我使用的是ubuntu(15.10),我可以上载文件,但无法在视图中看到它们。会有什么问题?如何在视图中显示图像?共享代码。尝试以下操作:
Yii::getAlias('@root'))“/uploads/”.$model->image
。我也尝试过使用getAlias-没有成功。文件夹中可能有一些限制吗?我的操作系统是Windows 10。您的web服务器中的DocumentRoot可能是www/yiiaApplication/。但我有www/yiiaApplication/backend/web。在这种情况下,您现在不知道如何访问www/yiiaApplication/uploads吗?@MuhammadShahzad,在使用gridview查看文件时,不能按照上述步骤加载图像。在“新建”选项卡中访问图像时出现404错误。
<?php
use yii\widgets\ActiveForm;
?>

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>

    <?= $form->field($model, 'image')->fileInput() ?>

    <button>Submit</button>

<?php ActiveForm::end() ?>
 class PostController extends Controller
   {
       public function actionCreate()
       {
        $model = new Post();
        if ($model->load(Yii::$app->request->post())) {            
            $file = \yii\web\UploadedFile::getInstance($model, 'image');
            if (!empty($file))
                $model->image = $file;

            if($model->save())
            {
             if (!empty($file))
              $file->saveAs( Yii::getAlias('@root') .'/uploads/' . $file);

              return $this->redirect(['view', 'id' => $model->id]);
            }
            return $this->render('create', ['model' => $model]);
        } else {
            return $this->render('create', ['model' => $model]);
        }
       }

       public function actionUpdate($id)
       {
        $model = $this->findModel($id);
        if ($model->load(Yii::$app->request->post())){           
            $file = \yii\web\UploadedFile::getInstance($model, 'image');
           if (!empty($file)){
                 $delete = $model->oldAttributes['image'];
                 $model->image= $file; 
            }
            else{
                $model->image = $model->oldAttributes['image'];
            }
            if($model->save())
            {
             if (!empty($file))
              $file->saveAs( Yii::getAlias('@root') .'/uploads/' . $file);

              return $this->redirect(['view', 'id' => $model->id]);
            }
            return $this->render('update', ['model' => $model]);
        } else {
            return $this->render('update', ['model' => $model]);
        }
    }

       public function actionDelete($id)
       {
        $model = $this->findModel($id);
        if(file_exists(Yii::getAlias('@root') . '/uploads/'. $model->image))
        unlink(Yii::getAlias('@root') . '/uploads/'. $model->image);
        $model->delete(); 
         return $this->redirect(['index']);
       }

  }
[
'attribute' => 'image',
'format' => 'html',    
'value' => function ($data) {
    return Html::img('../../../uploads/'. $data['image'],
        ['width' => '70px']);
 },
],
   [
      'attribute'=>'image',
      'label'=> 'Post Picture',
      'value'=> '../../../uploads/' . $model->image,
      'format'=>['image',['width'=>100, 'height'=>100]]
    ],
RewriteEngine on

  RewriteCond %{REQUEST_URI} /(uploads)
  RewriteRule ^uploads/(.*)$ uploads/$1 [L]
 <img src="<?php echo 'uploads/'.$model->image; ?>">