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

Posted

技术标签:

【中文标题】Laravel 5.8 文件上传使用 PUT 方法和 ajax【英文标题】:Laravel 5.8 file upload using PUT method with ajax 【发布时间】:2020-04-06 10:57:02 【问题描述】:

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

<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>

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢兄弟。我不知道我应该将 PUT 方法与我的请求一起添加到我的表单数据中。

以上是关于Laravel 5.8 文件上传使用 PUT 方法和 ajax的主要内容,如果未能解决你的问题,请参考以下文章

无法在 laravel 5.8 中上传图片

在Laravel 5.8中无法上传图片?

Laravel 5.8多态关系`nullableMorphs`不起作用

如何使用Storage :: put on laravel上传图像?

mpdf 文件 laravel 5.8 , 播放某些pdf文件而其他正常播放时出现错误 使用框架laravel执行

在 laravel 5.8 中导入 excel 文件后无法管理文件数据