如何在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; ?>">