如何在 PHP 服务器端处理具有多个文件的 javascript 表单数据?

How to handle javascript formdata with multiple files on PHP server side?

我正在努力如何处理通过 ajax 发送到控制器的 多个图像 并将它们存储起来。我读到我应该创建新的 FormData 对象,我做到了。

让我们看看我的代码:

HTML:

<form enctype="multipart/form-data" id="formularz">
          <label class="btn btn-sm btn-success" for="files">
            <input id="files" type="file" name="zdjęcie[]" multiple style="display:none;" onchange="$('#upload-file-info').html($(this).val());">
            <i class="fa fa-plus-circle" aria-hidden="true"></i> Dodaj zdjęcia
            <input type="hidden" name="_token" value="{{Session::token()}}">
          </label>
          <label class="btn btn-sm btn-danger deleteImages">
            <i class="fa fa-times-circle" aria-hidden="true"></i> Wyczyść
          </label>
          <br>
          <div class="chosenImages">
            <output id="list"></output>
          </div>
</form>

JS:

var formData = new FormData($('#formularz')[0]);

      $.ajax({
        method:"POST",
        url:postAddNews,
        data: {
          formData:formData,
          _token:token
        },
        cache:false,
        contentType: false,
        processData: false,
        success:function(data){
            console.log("success");
            console.log(data);
        },
        error: function(data){
            console.log("error");
            console.log(data);
        }
     });

在服务器端我会这样做(不通过 ajax 发送):

$files = $request->file('zdjęcie');

$i = 1;
$filename = array();

foreach($files as $file) {
        Storage::disk('local')->put('newsimages/'.$i.'.'.$file->extension(), file_get_contents($file));
        $i++;
} 

当我检查 formData 对象时,我只能看到这个:

首先你要改变:

var formData = new FormData($('#formularz')[0]);

通过上面的代码,您只向 formdata 添加了一个文件,但是 multiple 属性也在那里。因此,您必须将所有文件附加到表单数据中,例如:

var frmData = new FormData();
$.each($('#formularz_images')[0].files, function(i, file) {
    frmData.append('formularz[]', file);
});

你可以像这样在控制器中获取它们:

$data  = Input::all();

这里$data里面包含了formularz索引,里面包含了里面所有的图片。使用 foreach() 获取单个图像,例如:

foreach($data['formularz'] as $image)
{

}