【问题标题】:slim 4 - multiple file upload empty $_FILES arrayslim 4 - 多个文件上传空 $_FILES 数组
【发布时间】:2021-02-26 21:22:30
【问题描述】:

在我的 vue 和 php 应用程序中一次上传多个文件时遇到了一些麻烦。我正在使用 slim 来发布上传请求的端点: 在服务器端,我有这段代码来测试是否一切正常:

$app->post('/compress', function(Request $request, Response $response){

    $files = $request->getUploadedFiles();
    var_dump($files); // this will result in empty
    
    //return $response;
});

在我的 javascript 代码中,在一个 vue 方法中,我有这个代码,当文件输入发生变化时会调用它:

      let formData = new FormData();
      for(let i; i < this.$refs.selectedImages.files.length; i++){
        formData.append('images[]', this.$refs.selectedImages.files[i]);
      }

      let config = {
        header: {
          'Content-Type': 'multipart/form-data',
        },
        withCredentials: true
      }

      axios.post('http://localhost:3000/compress', formData, config)
      .then( (response) => {
        console.log(response, response.data);
      });

结果是var_dump 会给我空。我该如何解决?

【问题讨论】:

    标签: php vue.js axios


    【解决方案1】:

    经过大量调试后,我修复了代码。问题在于for() 循环在我的情况下似乎无法迭代 FileList。我用forEach() 替换了它,瞧!服务器开始获取上传的文件。

    let files = this.$resf.selectedImages.files;
    let formData = new FormData();
    files.forEach( (el) => {
      formData.append('images[]', el); 
    });
    

    【讨论】:

      【解决方案2】:

      你可以试试这个吗?

      for( var i = 0; i < this.$refs.selectedImages.files.length; i++ ){
          let file = this.$refs.selectedImages.files[i];
          formData.append('images[' + i + ']', file);
      }
      

      【讨论】:

      • 经过测试,但在服务器端我得到Undefined index images,这是我分配给FormData 附加字段的名称。这就像$request-&gt;getUploadedFiles() 不会被填充。
      • 我也像这里建议的那样循环了服务器端代码中的getUploadedFiles()
      • 嗯,先注释掉这个$files = $request-&gt;getUploadedFiles();,然后尝试转储$_FILES
      • 转储 $_FILES 全局将导致空。但苗条的处理 $_FILES 使用 $request 对象:(
      猜你喜欢
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2015-08-18
      • 2021-04-30
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多