caglayantolga35's avatar

Laravel Ajax File Upload

Hello Laravel and Ajax I just started learning. When saving Ajax data, I am saving all data properly. But I'm having trouble uploading pictures. Is there anyone who can help?

/my controller

public function store(Request $request, Blog $blog)

    {
        $validator = Validator::make($request->all(), [
          'blog_baslik' => 'required',
           'blog_icerik' => 'required|string|min:2|max:1750',
          'blog_resim' => 'required|mimes:jpg,jpeg,png',

        ]);
 
        if ($validator->fails()) {
            return response()->json(['errors' => $validator->errors()->all()]);
        }
        $blog->storeData($request->all());
        if ($validator->passes()) {
            $input['blog_resim'] = time() . '.' . $request->blog_resim. ".jpg";
            $request->blog_resim->move(public_path('image/blog'), $input['image']);
            Blog::create($input);
            return response()->json(['success' => 'done',$input]);
        }
 
    }

//model


   public function storeData($input)
{
    return static::create($input);
 
}

//My script

<script type="text/javascript">

                        $(function () {
                            var table = $('.yajra-datatable').DataTable({
                                processing: true,
                                serverSide: true,
                                ajax: "{‌{ route('blog.list') }}",
                                columns: [
                                    {data: 'DT_RowIndex', name: 'DT_RowIndex'},
                                    {data: 'kategori_id', name: 'kategori_id'},
                                    {data: 'blog_baslik', name: 'blog_baslik'},
                                    {data: 'blog_resim', name: 'blog_resim', sortable: false, searchable: false},
                                    {data: 'created_at', name: 'created_at'},
                                    {
                                        data: 'action',
                                        name: 'action',
                                        orderable: true,
                                        searchable: true
                                    },
                                ]
                            });
                        });
  // Create article Ajax request.
                        $('#SubmitCreateArticleForm').click(function(e) {
                            CKEDITOR.instances['blog_icerik'].updateElement();
 
                            e.preventDefault();
                            $.ajaxSetup({
                                headers: {
                                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                                }
                            });
                            $.ajax({
                                url: "{‌{ route('blog.store') }}",
                                method: 'post',
                                data: {
                                    kategori_id: $('#kategori_id').val(),
                                    blog_baslik: $('#blog_baslik').val(),
                                    blog_icerik: $('#blog_icerik').val(),
                                    blog_resim: $('#blog_resim').val(),
                                    blog_meta_title: $('#blog_meta_title').val(),
                                    blog_meta_desc: $('#blog_meta_desc').val(),
 
                                },
 
                                success: function(result) {
                                    if(result.errors) {
                                        $('.alert-danger').html('');
                                        $.each(result.errors, function(key, value) {
                                            $('.alert-danger').show();
                                            $('.alert-danger').append('<strong><li>'+value+'</li></strong>');
                                        });
                                    } else {
                                        $('.alert-danger').hide();
                                        $('.alert-success').show();
                                        $('.yajra-datatable').DataTable().ajax.reload();
                                        setInterval(function() {
                                            $('.alert-success').hide();
                                            $('.modal-backdrop').remove();
                                            $('#CreateArticleModal').modal('hide');
 
                                        }, 2000);
                                    }
                                }
                                    });
                        });
 
                        // Silme İşlemleri
                        var deleteID;
                        $('body').on('click', '#getDeleteId', function () {
                            deleteID = $(this).data('id');
                        })
                        $('#SubmitDeleteArticleForm').click(function (e) {
                            e.preventDefault();
                            var id = deleteID;
                            $.ajaxSetup({
                                headers: {
                                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                                }
                            });
                            $.ajax({
                                url: "blog/" + id,
                                method: 'DELETE',
                                success: function (result) {
                                    $('.modal-backdrop').remove();
                                    $('#DeleteArticleModal').hide();
                                    $('.alert-success').show();
                                    $('.yajra-datatable').DataTable().ajax.reload();
 
                                }
                            });
                        });
                    </script>

///ekleme işlemi

0 likes
6 replies
assoft's avatar

Try this;

let formData = new FormData();           

formData.append("kategori_id", $('#kategori_id').val()),
formData.append("blog_baslik", $('#blog_baslik').val()),
formData.append("blog_icerik", $('#blog_icerik').val()),
formData.append("blog_resim", $('#blog_resim').files[0]);
formData.append("blog_meta_title", $('#blog_meta_title').val()),
formData.append("blog_meta_desc", $('#blog_meta_desc').val())

$.ajax({
    url: "{‌{ route('blog.store') }}",
    method: 'post',
    data: formData
    // ...
})
1 like
assoft's avatar
assoft
Best Answer
Level 4
$fileName = time().'_'.request()->file("blog_resim")->getClientOriginalName();
$filePath = request()->file('blog_resim')->storeAs('uploads', $fileName, 'public');

$blog = new Blog();
$blog->url = '/storage/' . $filePath;
// ...
$blog->save();
1 like
vumanhtrung's avatar

You can try below code

...
if ($validator->passes()) {
	$blog = new Blog;
	$blog->blog_baslik = $request->blog_baslik;
	$blog->blog_icerik = $request->blog_icerik;
	if($request->hasFile('blog_resim'))
        {
              $file = $request->File('blog_resim');
              $ext = $file->getClientOriginalExtension();
              $filename = time() . '.' . $ext;
              $file->move('image/blog', $filename);
              $blog->blog_resim = $filename;
        }
        $blog->save();
    ...
}

Please or to participate in this conversation.