通过在占位符图像上拖放来上传图像

时间:2020-07-31 09:58:23

标签: javascript php jquery laravel drag-and-drop

自最近几天以来,我一直在努力解决问题……最后希望我能从lavarel社区得到一些答案。

在处理Laravel项目时,我尝试通过拖放或选择来上传图像(单个图像)。

注意:我有一个占位符图像,我想将其用作放置区,而且大小可能会因我要使用的位置而异。现在,我应该能够在该占位符图像上放置一个图像。 在放下或选择新图像时,将替换占位符图像(这是我能够实现的部分),但是如果我尝试提交表单(如果我放了一个文件),它将无法到达控制器。但是当我选择文件时,我感觉很好。

这是我到目前为止所做的...任何人都可以让我知道提交的拖放方法有什么问题吗...我能想到的唯一问题是删除文件时无法设置该值。

这是我的刀刃形式

<form class="form" action="{{ route('categories.store') }}" method="post" enctype="multipart/form-data">
                    @csrf
                    <div class="form-group row">
                        <label for="category" class="col-sm-4 col-form-label">Category</label>
                        <div class="col-sm-8">
                            <input id="category" type="text" class="form-control @error('category') is-invalid @enderror" name="category" value="{{ old('category') }}">
                            @error('category')
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                            @enderror
                        </div>
                    </div>
                    <div class="form-group row">
                        <label for="slug" class="col-sm-4 col-form-label">Slug</label>
                        <div class="col-sm-8">
                            <input id="slug" type="text" class="form-control @error('slug') is-invalid @enderror" name="slug" value="{{ old('slug') }}">
                            @error('slug')
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                            @enderror
                        </div>
                    </div>
                    <div class="form-group row">
                        <label for="order" class="col-sm-4 col-form-label">Display Order</label>
                        <div class="col-sm-8">
                            <input id="order" type="number" class="form-control" name="order" value="{{ old('order') }}">
                        </div>
                    </div>
                    <div class="form-group row">
                        <label for="status" class="col-sm-4 col-form-label">Status</label>
                        <div class="col-sm-8">
                            <select id="status" class="form-control form__select" name="status">
                                <option value="1">Active</option>
                                <option value="0">Inactive</option>
                            </select>
                        </div>
                    </div>
                    <div class="form-group row">
                        <label for="file" class="col-sm-4 col-form-label">Upload Image</label>
                        <div class="col-sm-8">
                            <div class="upload-area" id="uploadfile">
                                {{-- <h1>Drag and Drop file here<br/>Or<br/>Click to select file</h1> --}}
                                <img class="img-fluid" src="{{ asset('img/640x480.png') }}" height="200px" id="file_preview" alt="img" />
                            </div>
                            <input type="file" name="file" id="file">
                            @error('file')
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                            @enderror
                        </div>
                    </div>
                    <div class="form-group row">
                        <div class="col-sm-12">
                            <button type="submit" class="form__submit">Save</button>
                        </div>
                    </div>
                </form>

style.css

.upload-area{
    width: 42%;
    border: 2px solid lightgray;
    border-radius: 3px;
    text-align: left;
    overflow: auto;
}

.upload-area:hover{
    cursor: pointer;
}

.upload-area h1{
    text-align: center;
    font-weight: normal;
    font-family: sans-serif;
    line-height: 50px;
    color: darkslategray;
}

#file{
    opacity: 0;
}

最后是我的JavaScript

 // On File Drop
        $('.upload-area').on('drop', function (e) {
            e.stopPropagation();
            e.preventDefault();
            $(this).removeClass("dragover");
   
            var file = e.originalEvent.dataTransfer.files[0];
            readFile(file);

            var fd = new FormData();
            fd.append('file', file[0]);
            // uploadData(fd);
        });

        // Open file selector on div click
        $("#uploadfile").click(function () {
            $("#file").click();
        });

        // file selected
        $("#file").change(function () {
            var file = $('#file')[0].files[0];
            readFile(file);
        });


    function readFile(file) {

        var reader = new FileReader();
        reader.onload = function (e) {
            $('#file_preview').attr('src', e.target.result);
        };
        reader.readAsDataURL(file);
    }

0 个答案:

没有答案