如何在Laravel中将foreach用于ajax数组



我有一个ajax函数,可以在数组中发布多个文件。如何存储这些文件?我在控制器中尝试了以下代码,但只存储了第一个文件。

foreach ($request->photos as $imagefile) {
$imageName = $imagefile->getClientOriginalName();
$imagePath = public_path('folder-path/');
$imagefile->move($imagePath,$imageName);
}

这也是我的数组的样子来自ajax 的数组

按照@innovin的要求。

刀片文件

<input name="files[]" type="file" class="form-control" accept="image/png, image/jpeg" multiple id="files">

<a href="javascript:;" class="btn btn-primary" onclick="otherUpload()">Update</a>

function otherUpload(){
var outputdata = [];
var fileSelect = document.getElementById('files');
var files = fileSelect.files;
var formData = new FormData();
// Loop through each of the selected files.
for (var i = 0; i < files.length; i++) {
var file = files[i];
// Check the file type.
if (!file.type.match('image.*')) {
continue;
}
// Add the file to the request.
formData.append('photos[]', file, file.name);
}
$.ajax({
type: "POST",
url: 'post-url',
contentType: false,
processData: false,
dataType:'json',
data: formData,
success:function(data) {
if(data.code == 1){
console.log(data);
fetchOtherImages();
}
}
});
}
</script>```

您应该循环通过$request->file('photos')而不是$request->photos

if($request->hasfile('photos'))
{
foreach($request->file('photos') as $photo)
{
$name = $photo->getClientOriginalName();
$file->move(public_path('folder-path'), $name); 
// to store file in Storage folder:  
//$file->storeAs('files', $name); 
}
}

注意,函数GetClientOriginalName()用于在laravel中上传时检索文件的原始名称,只有当数据以数组而不是字符串的形式发送时,这才可能实现。因此,无论何时创建带有文件或图像输入字段的表单,都必须添加enctype="multipart/form-data"

最新更新