使用 Ajax 和 Laravel 5.6 的多图像上传
Multiple Image Upload using Ajax with Laravel 5.6
首先我要为我的工程师道歉。
其次我不想使用任何插件。
我想上传多张图片,不用 ajax 也可以,但我想用 Ajax 上传。
我把我的代码放在这里。
<form action="{{route('image-upload.store')}}" method="post" enctype="multipart/form-data">
{{csrf_field()}}
<input type="file" id="image-upload" name="image_upload[]" enctype="multipart/form-data" multiple>
<button type="submit">save</button>
</form>
控制器:
if ($request->hasFile('image_upload')) {
$images = $request->file('image_upload');
foreach ($images as $image) {
$randonName = rand(1, 200);
$name = $image->getClientOriginalName();
$storename = $randonName . '_' . $name;
$image->move(public_path('images/test'), $storename);
}
}
return redirect()->back();
以上代码只是简单地上传多张图片而没有 Ajax。
这里 Ajax :
html :
<input type="file" id="image-upload" name="image_upload[]" enctype="multipart/form-data" multiple>
Ajax :
$.ajaxSetup({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}
});
$('#image-upload').change(function () {
event.preventDefault();
let image_upload = new FormData();
let TotalImages = $('#image-upload')[0].files.length; //Total Images
let images = $('#image-upload')[0];
for (let i = 0; i < TotalImages; i++) {
image_upload.append('images', images.files[i]);
}
image_upload.append('TotalImages', TotalImages);
$.ajax({
method: 'POST',
url: '/image-upload',
data: image_upload,
contentType: false,
processData: false,
success: function (images) {
console.log(`ok ${images}`)
},
error: function () {
console.log(`Failed`)
}
})
})
控制器:
if ($request->images) {
$images = $request->images;
$total=$request->TotalImages;
$imagesName = $images->getClientOriginalName();
$randonName = rand(1, 200);
$images->move(public_path('/images/test'), $randonName . '.jpg');
return response()->json($randonName);
}
现在这段代码工作正常,但只适用于一张图片。我知道我 Sould 把它 Loop
我做了但没有得到我的回应。
所以如果有人能告诉我怎么做?
这是我的努力:
if ($request->images) {
$total=$request->TotalImages;
$images = $request->images;
for($j=0; $j<$total;$j++){
$imagesName = $images->getClientOriginalName();
$randonName = rand(1, 200);
$images->move(public_path('/images/test'), $randonName . '.jpg');
}
return response()->json($randonName);
}
if ($request->images) {
$images = $request->images;
foreach ($images as $image) {
$imagesName = $images->getClientOriginalName();
$randonName = rand(1, 200);
$image->move(public_path('/images/test'),$randonName . $imagesName . $randonName . '.jpg');
}
}
更新您的代码如下:
for (let i = 0; i < TotalImages; i++) {
image_upload.append('images', images.files[i]);
}
至
for (let i = 0; i < TotalImages; i++) {
image_upload.append('images' + i, images.files[i]);
}
这应该可以帮助您提交多张图片。
这也行得通这将发送图像数组以便在控制器中轻松获取它
for (let i = 0; i < TotalImages; i++) {
image_upload.append('images[]', images.files[i]);
}
首先我要为我的工程师道歉。
其次我不想使用任何插件。
我想上传多张图片,不用 ajax 也可以,但我想用 Ajax 上传。 我把我的代码放在这里。
<form action="{{route('image-upload.store')}}" method="post" enctype="multipart/form-data">
{{csrf_field()}}
<input type="file" id="image-upload" name="image_upload[]" enctype="multipart/form-data" multiple>
<button type="submit">save</button>
</form>
控制器:
if ($request->hasFile('image_upload')) {
$images = $request->file('image_upload');
foreach ($images as $image) {
$randonName = rand(1, 200);
$name = $image->getClientOriginalName();
$storename = $randonName . '_' . $name;
$image->move(public_path('images/test'), $storename);
}
}
return redirect()->back();
以上代码只是简单地上传多张图片而没有 Ajax。
这里 Ajax :
html :
<input type="file" id="image-upload" name="image_upload[]" enctype="multipart/form-data" multiple>
Ajax :
$.ajaxSetup({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}
});
$('#image-upload').change(function () {
event.preventDefault();
let image_upload = new FormData();
let TotalImages = $('#image-upload')[0].files.length; //Total Images
let images = $('#image-upload')[0];
for (let i = 0; i < TotalImages; i++) {
image_upload.append('images', images.files[i]);
}
image_upload.append('TotalImages', TotalImages);
$.ajax({
method: 'POST',
url: '/image-upload',
data: image_upload,
contentType: false,
processData: false,
success: function (images) {
console.log(`ok ${images}`)
},
error: function () {
console.log(`Failed`)
}
})
})
控制器:
if ($request->images) {
$images = $request->images;
$total=$request->TotalImages;
$imagesName = $images->getClientOriginalName();
$randonName = rand(1, 200);
$images->move(public_path('/images/test'), $randonName . '.jpg');
return response()->json($randonName);
}
现在这段代码工作正常,但只适用于一张图片。我知道我 Sould 把它 Loop
我做了但没有得到我的回应。
所以如果有人能告诉我怎么做?
这是我的努力:
if ($request->images) {
$total=$request->TotalImages;
$images = $request->images;
for($j=0; $j<$total;$j++){
$imagesName = $images->getClientOriginalName();
$randonName = rand(1, 200);
$images->move(public_path('/images/test'), $randonName . '.jpg');
}
return response()->json($randonName);
}
if ($request->images) {
$images = $request->images;
foreach ($images as $image) {
$imagesName = $images->getClientOriginalName();
$randonName = rand(1, 200);
$image->move(public_path('/images/test'),$randonName . $imagesName . $randonName . '.jpg');
}
}
更新您的代码如下:
for (let i = 0; i < TotalImages; i++) {
image_upload.append('images', images.files[i]);
}
至
for (let i = 0; i < TotalImages; i++) {
image_upload.append('images' + i, images.files[i]);
}
这应该可以帮助您提交多张图片。
这也行得通这将发送图像数组以便在控制器中轻松获取它
for (let i = 0; i < TotalImages; i++) {
image_upload.append('images[]', images.files[i]);
}