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

如何上传多个文件在YII2使用Dropzone?

丁嘉
2023-03-14

我正在尝试使用DropZone上载多个文件。但在控制器中检索文件名时出现问题。请帮我找出哪里出了错。我已经在下面发布了我的代码。

DropZone的HTML代码:

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

脚本文件,用于:

    <?php
$htmlString = "http://localhost/project/backend/web/news/create";
$this->registerJs(
    "Dropzone.autoDiscover = false;
  $(document).ready(function() {
      var myDropzone = new Dropzone('#my-dropzone', {
          url: '$htmlString',
          autoProcessQueue: false,
          enqueueForUpload: false,
          autoDiscover: false,
          addRemoveLinks: true,
          uploadMultiple: true,
          paramName: 'News[imgFiles]',
          maxFiles: 10,
          maxFilesize: 2,
          parallelUploads: 10,
          acceptedFiles: 'image/*',
          params: {
              '_csrf-backend': $('input[name=_csrf-backend]').val()
          },
          success: function (file, response) {
            var imgName = response;
            file.previewElement.classList.add('dz-success');
            console.log('Successfully uploaded :' + imgName);

        },

           init: function () {

            var myDropzone = this;

           var submitButton = document.querySelector('#imageSubmit');

            submitButton.addEventListener('click', function (file) {

                if (myDropzone.getQueuedFiles().length > 0) {

                    var submitfiles = false;

                    if (submitfiles === true) {
                        submitfiles = false;
                        return;
                    }

                    file.preventDefault();
                    myDropzone.processQueue();

                    myDropzone.on('complete', function (data, xhr, formData) {
                        submitfiles = true;
                        $('#imageSubmit').trigger('click');
                    });

                }
            });
        }
      });

  });", $this::POS_END);

在控制器actionCreate()方法中:

 public function actionCreate()
{
    $model = new News();
    if (Yii::$app->request->isAjax) {
        if ($model->load(Yii::$app->request->post())) {
            if ($model->save()) {
                Yii::$app->session->setFlash("success", "success");
                return true;
            } else {
                print_r($model);
                exit;
            }
        }
    }
    if ($model->load(Yii::$app->request->post()) ) {
        $model->imageFiles = UploadedFile::getInstances($model, 'imgFiles');
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

当我在拖放框中添加图片并点击提交按钮时,拖放框中的图片显示成功结果。但是当我试着打印$模型的时候-

共有1个答案

权烨磊
2023-03-14

作曲家需要--able-dist perminder-klair/yii2-dropzone"dev-master"。它用于表单属性:

<?= $form->field($model, 'city_id')->widget(DropZone::className(), [
        'options'      => [
            'maxFilesize' => '2',
        ],
        'clientEvents' => [
            'complete'    => "function(file){console.log(file)}",
            'removedfile' => "function(file){alert(file.name + ' is removed')}",
        ],
    ]) ?>

它是控制器动作:

public function actionUpload()
{
    $fileName = 'file';
    $uploadPath = './files';

    if (isset($_FILES[$fileName])) {
        $file = \yii\web\UploadedFile::getInstanceByName($fileName);

        //Print file data
        //print_r($file);

        if ($file->saveAs($uploadPath . '/' . $file->name)) {
            //Now save file data to database

            echo \yii\helpers\Json::encode($file);
        }
    }

    return false;
}
 类似资料:
  • 我试图理解以下文档: Transferutility.UploadDirectory null null null

  • 但是如何为多个文件做呢? PS.在webflux中有没有另一种上传一组文件的方法?

  • 问题内容: 这是我上传多个文件的代码: HTML代码: 密码: 但是它会上传单个文件,而不是多个文件。 问题答案: 在模板中,你需要在上传输入中添加属性: 然后在查看功能中,上传的文件可以通过列表获取。循环此列表并在每个项目上调用save()方法将它们保存在给定路径中: 此外,你可能需要使用secure_filename()来清洁文件名: 你也可以使用此方法生成随机文件名。 完整演示 视图: im

  • 我决定上传几个图像文件使用文件输入小部件 控制员/行动 模型 这是印刷品 后果 结果是数组中只有最后一个文件。如果我不使用这个小部件,那么一切都是正常加载的数组。 如何加载和处理一组照片?

  • 问题内容: 我正在使用和Path上传单个文件。代码如下: 对于一个文件,这很好用。我需要测试多个文件上传。如何传递多个文件? 问题答案: Selenium仍然不支持多个文件上传: 但是,根据webdriver:upload多个文件,您应该能够 在Chrome中 通过使用换行符连接文件路径 来解决该问题: 另请参阅: 文件上传-在FireFox中上传多个文件

  • 问题内容: 我想使用PHP上传文件,但问题是我不知道要上传多少文件。 我的问题是,如果使用该如何上传文件? 我将仅添加“文件”框,并使用JavaScript创建更多要上传的文件输入,但是如何在PHP中处理它们呢? 问题答案: 请参阅:$ _FILES ,处理文件上传