如何在 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)
{
}
我正在努力如何处理通过 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)
{
}