简体   繁体   English

如何触发拖放文件上传?

[英]How can I trigger a Drag and Drop file upload?

I have made a webpage with a input form.我制作了一个带有输入表单的网页。 A user can either click on the box or drag and drop a file.用户可以单击框或拖放文件。
I am having no issue with click and upload.我对点击和上传没有问题。
The issue here is with drag and drop upload.这里的问题是拖放上传。 Whenever I drag and drop a file over the desired area, the files gets registered in the DataTransfer but it doesn't trigger the drag and drop and hence no further processing.每当我将文件拖放到所需区域上时,文件都会在 DataTransfer 中注册,但不会触发拖放,因此不会进行进一步处理。

$form.trigger('submit') I used this line to trigger the drag and drop but it triggers <input> again and an empty file is returned instead of the file in DataTransfer. $form.trigger('submit')我使用这一行来触发拖放,但它再次触发<input>并返回一个空文件而不是 DataTransfer 中的文件。
Codepen Link: Codepen代码笔链接:代码笔

Here is the complete JS code.这是完整的JS代码。


//The code that triggers when the file is dropped. The trigger code should be in this function below;

dropArea.addEventListener("drop", (e) => {
    e.stopPropagation();
    e.preventDefault();
    dropArea.classList.add("drop_area--drag");
    container.classList.add("container--drag");
    orSpan.classList.add("or_span--drag");
    dropInfo.classList.add("drop_info--drag");
    btn.classList.add("pdf_btn--drag");
    icon.classList.add("icon--drop");
    loading.classList.remove("loading");
    loading.classList.add("loading--drop");
    button.classList.add("pdf_btn_container--drag");
    /*reader.onload = ()=>{
    };*/
    file = e.dataTransfer.files;
    //let $form = $('form');
    //$form.trigger('submit');
    console.log(file);
    if (file.length > 1 || file.length === 0) {
        alert("Multiple files selected!");
        dropArea.classList.remove("drop_area--drag");
        container.classList.remove("container--drag");
        orSpan.classList.remove("or_span--drag");
        dropInfo.classList.remove("drop_info--drag");
        btn.classList.remove("pdf_btn--drag")
        loading.classList.add("loading");
        loading.classList.remove("loading--drop");
        button.classList.remove("pdf_btn_container--drag");
        icon.classList.remove("icon--drag");
        icon.classList.remove("icon--drop");
    } else {
        file = file[0];
        //console.log(file);
        $(function(){

            let $form = $("form");
            //$form.trigger('submit');
            ajaxData = new FormData();
            console.log(1,file);
            ajaxData.append($('input').attr('name'), file);
            console.log(2,file);
            console.log(ajaxData);
            $.ajax({
                url: $form.attr('action'),
                type: $form.attr('method'),
                data: ajaxData,
                //dataType: 'json',
                cache: false,
                contentType: false,
                processData: false,
                success: function (data){
                    console.log("Success");
                },
            });
            //$form.trigger('submit'); //Using this triggers the <input> box and an empty file is returned instead of the file in DataTransfer.
        });
    }
});

//The code below triggers <input> because input button is hidden.

document.getElementById("certificate").onchange = function () {
    console.log("Le bhai main bhi chal gya!");
    dropArea.classList.add("drop_area--drag");
    container.classList.add("container--drag");
    orSpan.classList.add("or_span--drag");
    dropInfo.classList.add("drop_info--drag");
    btn.classList.add("pdf_btn--drag");
    icon.classList.add("icon--drop");
    loading.classList.remove("loading");
    loading.classList.add("loading--drop");
    button.classList.add("pdf_btn_container--drag");
    console.log(document.getElementById("certificate").value);
    document.getElementsByTagName("form")[0].submit();
}

PS <input> here means click and upload. PS <input>这里的意思是点击上传。

$form.trigger('submit') can be used to trigger the form. $form.trigger('submit')可用于触发表单。 In my case it is now triggering twice sending my file and an empty octet-stream.在我的情况下,它现在触发两次发送我的文件和一个空的八位字节流。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM