首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ajax和Laravel5.6进行多次图像上传

使用Ajax和Laravel5.6进行多次图像上传
EN

Stack Overflow用户
提问于 2018-07-21 11:39:07
回答 2查看 6.9K关注 0票数 4

首先我要为我的英语道歉。

第二,我不想使用任何插件。

我想上传多个图像,我可以不使用ajax完成,但是我想用Ajax上传。我把密码放在这里了。

代码语言:javascript
复制
<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>                          

主计长:

代码语言:javascript
复制
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:

代码语言:javascript
复制
 <input type="file" id="image-upload" name="image_upload[]" enctype="multipart/form-data" multiple>

Ajax:

代码语言:javascript
复制
 $.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`)
        }
    })

})

主计长:

代码语言:javascript
复制
  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);
    }

现在这个代码工作很好,但只适用于一个图像。我知道我应该把它Loop和我做了,但没有得到我的反应。

如果有人能告诉我怎么做的话?

在这方面,我的努力:

代码语言:javascript
复制
 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');
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-21 14:53:00

按以下方式更新代码:

代码语言:javascript
复制
for (let i = 0; i < TotalImages; i++) {
    image_upload.append('images', images.files[i]);
}

代码语言:javascript
复制
for (let i = 0; i < TotalImages; i++) {
    image_upload.append('images' + i, images.files[i]);
}

这将帮助您提交多个图像。

票数 2
EN

Stack Overflow用户

发布于 2018-10-23 11:25:12

它也能工作--这将发送图像数组,以便在控制器中很容易地得到它。

代码语言:javascript
复制
        for (let i = 0; i < TotalImages; i++) {
            image_upload.append('images[]', images.files[i]);
        }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51455679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档