当前位置: 首页 > 知识库问答 >
问题:

Yii2 FileInput-文件未保存到服务器中

袁弘化
2023-03-14

我正在使用Yii2和Kartik的FileInput扩展。我在保存到目录时遇到问题。我正在使用yii高级模板,并使用gii生成CRUD代码。我现在正在编辑它。

当我保存它时,它拒绝保存并显示“请上传文件”消息

将保存的文件. doc和. pdf大部分。

如果我在模型中设置'skipOnEmpty=True',它将保存表单而不是文件。

mysql表上的数据类型设置为VARCHAR,因为我只想保存其路径。

我遵循了这个指南-http://webtips.krajee.com/upload-file-yii-2-using-fileinput-widget/

这是我的模型;

<?php

namespace app\models;

use Yii;

class FormMovement extends \yii\db\ActiveRecord
{

    public static function tableName()
    {
        return 'form_movement';
    }

    public function rules()
    {
        return [
            [['fm_date_received', 'fm_form_name', 'fm_from', 'fm_ptj'], 'required'],
            [['form_id'], 'integer'],
            [['fm_date_received', 'fm_date_action1', 'fm_date_action2'], 'safe'],
            [['fm_form_name', 'fm_note'], 'string', 'max' => 500],
            [['fm_from', 'fm_ptj', 'fm_action1', 'fm_action2'], 'string', 'max' => 100],
            [['fm_upload'], 'file', 'skipOnEmpty' => false, 'extensions'=>'jpg,pdf,png,doc,docx,xls,xlsx'],
        ];
    }

}

然后这里是我的控制器(我只包括上传功能,但它是其余的生成代码(CRUD操作),

<?php

namespace frontend\controllers;

use Yii;
use app\models\FormMovement;
use app\models\SearchFormMovement;
//use app\models\FormType;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use yii\web\UploadedFile;

class FormMovementController extends Controller
{
public function actionUpload()
{
    $model = new FormMovement;
    if ($model->load(Yii::$app->request->post())) {
        $file = UploadedFile::getInstance($model, 'fm_upload');

        // store the source file name
        $model->fm_upload = $file->name;
        $ext = end((explode(".", $file->name)));

        $model->fm_upload = Yii::$app->security->generateRandomString().".{$ext}";

        $path = Yii::$app->params['uploadPath'] . $model->fm_upload;;

        if($model->save()){
            $file->saveAs($path);
            return $this->redirect(['view', 'id'=>$model->_id]);
        } else {
            // error in saving model
        }
    }
    return $this->render('create', [
        'model'=>$model,
    ]);
}
}

这是我的观点,也和控制器一样。代码只是上传部分。

<?php

use yii\helpers\Html;
use kartik\date\DatePicker;
//use app\models\FormMovement;
use app\models\FormType;
use yii\bootstrap\ActiveField;
use kartik\form\ActiveForm;
use kartik\file\FileInput;

/* @var $this yii\web\View */
/* @var $model app\models\FormMovement */
/* @var $form yii\widgets\ActiveForm */
?>

<div class="form-movement-form">

    <?php $form = ActiveForm::begin([![\[][1]][1]
        'type' => ActiveForm::TYPE_HORIZONTAL,
        'formConfig' => ['labelSpan' => 3, 'deviceSize' => ActiveForm::SIZE_SMALL], 
        'options' => ['enctype' => 'multipart/form-data']
    ]); ?>
<div class="form-group kv-fieldset-inline">
        <?= Html::activeLabel($model, 'fm_upload', [
                'label'=>'MUAT NAIK FAIL',
                'class'=>'col-sm-1 control-label'
            ]) ?>

        <div class="col-sm-8">
        <?= $form->field($model, 'fm_upload',[
                    'showLabels'=>false
                ])->widget(FileInput::classname(), [
                'options' => ['accept' => 'image/*'],
                'pluginOptions'=>['allowedFileExtensions'=>['jpg','pdf','png','doc','docx','xls','xlsx']
        ]]) ?>
        </div>
    </div>

    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>

希望我提供了足够的信息。谢谢你的帮助。

编辑:下面是日志的样子,我认为这是验证问题,但我真的不知道是哪个导致了它,模型还是控制器。

共有1个答案

艾浩穰
2023-03-14

检查路径是否正确并且不缺少/例如。

定义您的路径:

Yii::$app->params['uploadPath'] = Yii::getAlias("@frontend") . '/web/uploads/';

然后,$模型-

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

        // store the source file name
        $ext = end((explode(".", $file->name)));

        $new_name = Yii::$app->security->generateRandomString().".{$ext}";

        $path = Yii::$app->params['uploadPath'] . '/' . $new_name;
        $model->fm_upload = $new_name;

        $file->saveAs($path);

        if($model->save()){
            return $this->redirect(['view', 'id'=>$model->_id]);

        } else {
            // error in saving model
        }
    }
 类似资料:
  • 问题内容: 在这里和其他地方,我已经看到许多对此的部分答案,但是我非常适合作为新手程序员,并希望找到一个彻底的解决方案。我已经能够在Chrome Canary(v。29.x)中设置笔记本电脑麦克风的录制音频,并且可以使用recorder.js相对容易地设置录制.wav文件并将其保存在本地,例如: http://webaudiodemos.appspot.com/AudioRecorder/inde

  • 在我的服务器中,每小时生成一个文件,通常是250到300 mb,我想下载这些文件并将其放在hadoop下。如果有人有任何想法,请回复如何做。

  • 问题内容: 是否可以在不使用PHP的情况下使用JavaScript/jQuery将文本保存到新的文本文件中?我要保存的文本可能包含我不想转义或使用urlencode的HTML实体,JS,HTML,CSS和PHP脚本! 如果只能使用PHP来实现,如何将文本传递给PHP而不进行编码? 问题答案: 您必须具有服务器端脚本来处理您的请求,这不能使用javascript完成。 要将没有URIencoding

  • 我试图用一个标志图像存储一些细节,因为我已经创建了一个方法,并在我的本地系统中使用它,它似乎在那里工作得很好。但是当我把我的代码上传到云上的时候。我正在使用Heroku来承载我的web应用程序,它给了我一个错误。

  • 问题内容: 是否可以在不使用PHP的情况下使用JavaScript / jQuery将文本保存到新的文本文件中?我要保存的文本可能包含我不想转义或使用urlencode的HTML实体,JS,HTML,CSS和PHP脚本! 如果只能使用PHP来实现,如何将文本传递给PHP而不进行编码? 问题答案: 您必须具有服务器端脚本来处理您的请求,但这不能使用javascript完成。 要将没有URIencod