javascript - Laravel 无法上传图片

标签 javascript php laravel vue.js

我有一个 HTML 来上传多个图像。

我尝试调试,它为我上传的所有图像返回代码 200。

我的代码可能太多了,几乎都是拖拽图片排序的功能。但我仍然保留所有代码。

我不知道我的错误从哪里开始?

它还会运行到 success: function 并显示 toast 消息:Sweet Success

但它在控制台日志中显示错误,例如:GET http://localhost:8000/storage/apartments/JnJfDtTx2ix3W7z8J6PDCD4JskK0WZBWLrkSnUHW.jpeg 404(未找到)

以下是执行此操作的所有代码:

<form role="form" action="" method="POST" enctype="multipart/form-data">
    <!-- Images Tab -->
    <div role="tabpanel" class="tab-pane" id="images">
        <button class="btn btn-primary" type="button" id="upload"><i class="voyager-upload"></i>
            Upload image
        </button>
        <div id="uploadPreview" style="display:none;"></div>

        <div id="uploadProgress" class="progress active progress-striped" style="display:none;">
            <div class="progress-bar progress-bar-success" style="width: 0%"></div>
        </div>
        <div class="apartment-images">
            <div class="row" id="sort-image">
                <div class="col-xs-6 col-md-3 col-lg-2 draggable" v-for="(index, path) in files">
                    <div class="apartment-image">
                        <img :src="path" class="img-responsive">
                        <input type="hidden" name="images[]" :value="path">
                        <div class="row">
                            <div class="col-xs-6"><span v-if="index == 0">Main image</span></div>
                            <div class="col-xs-6 text-right"><button type="button" v-on:click="remove(index)" class="btn btn-default"><i class="voyager-trash"></i> Delete</button></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

    </div>

    <!-- CSRF TOKEN -->
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <br>
    <div class="panel-footer">
        <button type="submit" class="btn btn-success">Save Data</button>
    </div>
</form>

<iframe id="form_target" name="form_target" style="display:none"></iframe>
<form id="my_form" action="{{ route('voyager.upload') }}" target="form_target" method="post"
      enctype="multipart/form-data" style="width:0px;height:0;overflow:hidden">
    <input name="image" id="upload_file" type="file" onchange="$('#my_form').submit();this.value='';">
    <input type="hidden" name="type_slug" id="type_slug" value="{{ $dataType->slug }}">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

和 Javascript 代码:

@section('javascript')
<script>
    $('document').ready(function () {
        var apartment_images = [];

        @if(isset($apartment->slider_images))
            apartment_images = <?php echo json_encode(old('slider_images', $apartment->slider_images)) ?>;
        @elseif(old('slider_images'))
            apartment_images = <?php echo json_encode(old('slider_images')); ?>;
        @endif

        var manager = new Vue({
            el: '.apartment-images',
            data: {
                files: apartment_images
            },
            ready: function() {
                var vm = this;
                var list = document.getElementById("sort-image");
                Sortable.create(list, {
                    draggable: '.draggable',
                    onUpdate: function(evt) {
                        vm.reorder(evt.oldIndex, evt.newIndex);
                    }
                });
            },
            methods: {
                reorder(oldIndex, newIndex) {
                    // move the item in the underlying array
                    this.files.splice(newIndex, 0, this.files.splice(oldIndex, 1)[0]);
                },
                remove: function(index) {
                    this.files.splice(index, 1);
                }
            }
        });

        CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
        //var imageWidth = 762, imageHeight = 1100;
        $("#upload").dropzone({
            url: "{{ route('voyager.media.upload') }}",
            previewsContainer: "#uploadPreview",
            totaluploadprogress: function (uploadProgress, totalBytes, totalBytesSent) {
                $('#uploadProgress .progress-bar').css('width', uploadProgress + '%');
                if (uploadProgress == 100) {
                    $('#uploadProgress').delay(1500).slideUp(function () {
                        $('#uploadProgress .progress-bar').css('width', '0%');
                    });
                }
            },
            acceptedFiles: ".jpeg,.jpg,.png,.gif",
            processing: function () {
                $('#uploadProgress').fadeIn();
            },
            sending: function (file, xhr, formData) {
                formData.append("_token", CSRF_TOKEN);
                formData.append("upload_path", 'public/apartments');
                console.log(file);
            },
            success: function (e, res) {
                if (res.success) {
                    manager.files.push('/storage/' + res.path);
                    toastr.success(res.message, "Sweet Success!");
                } else {
                    toastr.error(res.message, "Whoopsie!");
                }
            },
            error: function (e, res, xhr) {
                toastr.error(res, "Whoopsie");
            },
            queuecomplete: function () {
                //getFiles(manager.folders);
            }
        });
    });
</script>
@stop

最佳答案

您使用的网址似乎不正确。您不应该直接访问存储。您的文件最终位于 projects/apartments 下,因此您可以将 URL 更改为:

http://localhost:8000/apartments/JnJfDtTx2ix3W7z8J6PDCD4JskK0WZBWLrkSnUHW.jpeg

关于javascript - Laravel 无法上传图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44609394/

相关文章:

javascript - 如何使用多个变量来检索 JS 对象?

Javascript 仅当字符串是数字时才将字符串转换为数字

PHP,检查电子邮件是否已在数据库中

php - UTF-8贯穿始终

php - Google Adwords API "An error has occurred: { "错误”: "invalid_grant" }"

php - 做一个 Laravel 教程,得到 "Base table or view not found: 1146 Table ' sdbd_todo.migrations' 不存在”

javascript - Moment.JS 月份的重音标记,西类牙语?

php - Laravel 处理异常

javascript - Laravel 5.2 - 使用 jquery 自动完成下拉菜单

javascript - 如何在 dom 节点上获取和提取匹配的 css 规则?