Laravel 5.8 使用 PUT 方法上传文件 ajax

Laravel 5.8 file upload using PUT method with ajax

我正在尝试使用 ajax 的 PUT 方法更新文件。无论出于何种原因,我都无法在我的控制器中发送请求。我创建了一个自定义验证器来检查文件是否丢失或某个输入请求是否丢失。它一直返回 422 file is missing and name is missing。我想念什么?下面是我的代码。

<script>
    $(document).ready(function() {
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

        $('#news_id').on('submit', function(e) {
            e.preventDefault();
            var data = new FormData();
            var newsletter_name = $('#newsletter_name').val();
            var newsletter_file = $('#newsletter_file')[0].files[0];
            data.append('newsletter_name', newsletter_name);
            data.append('newsletter_file', newsletter_file);
            var id = $('#hidden_id').val();
            console.log(newsletter_file);
            $.ajax({
                url: '/admin/newsletter/' + id,
                type: 'PUT',
                data: data,
                contentType: false,
                processData: false,
                beforeSend: function(data) {

                },
                success: function(data) {
                    console.log('success');
                },
                error: function(data) {
                    console.log(data)
                },
            });
        });
    });
</script>

这是我的 html 代码

<div class="container mt-5">
  <div class="col-md-6">
       <form action="" method="" enctype="multipart/form-data" id="news_id">
            @method('PUT')
            <div class="form-group">
                <label for="newsletter_name">Name</label>
                <input type="text" value="{{$newsletter->newsletter_name}}" name="newsletter_name" id="newsletter_name" class="form-control" placeholder="" aria-describedby="helpId">
                <input type="hidden" name="hidden_id" id="hidden_id" value="{{$newsletter->newsletter_id}}">
                <input type="hidden" name="_method" value="PUT">
            </div>
            <div class="input-group mb-3">
                <div class="custom-file">
                    <input name="newsletter_file" type="file" class="custom-file-input" id="newsletter_file" aria-describedby="inputGroupFileAddon03">
                    <label class="custom-file-label" for="newsletter_file">Choose file</label>
                </div>
            </div>
            <div>
                <button class="btn btn-primary btn-block" type="submit">UPDATE</button>
            </div>
        </form>
    </div>
</div>

添加 data.append('_method', 'PUT'); 然后将您的请求类型更改为 type: 'POST' 因为有些浏览器不能发送PUT请求,所以Laravel可以通过接收_method数据来接收PUT请求。