簡體   English   中英

如何以拖放方式上傳圖片?

[英]How to upload an image as drag and drop?

這是我的代碼:

$(".modal-dropzone-img").click(function() {
    $(this).siblings(".upload_image").trigger( "click" );
})

$('.upload_image').on('change', function () {
    var files = $(this)[0].files;
    processFileUpload(files, $(this).closest('form'));
    return false;
});

$('.modal-dropzone-img').on('drop dragdrop', function (e) {
    var files = e.originalEvent.dataTransfer.files;
    processFileUpload(files, $(this).closest('form'));
    return false;
});

function processFileUpload(droppedFiles, frm) {
    var uploadFormData = new FormData(frm[0]);
    uploadFormData.append("file", droppedFiles);
    console.log(droppedFiles);

    $.ajax({
        url: base_url +  frm.attr('action'),
        type: frm.attr('method'),
        data: uploadFormData,
        cache: false,
        contentType: false,
        processData: false,
        success: function (arr) {
            // File Uploaded
        }
    });
}

當我單擊容器時,我的代碼也能正常工作,但是當我將圖像拖到容器中並將其留在容器中時,代碼將無法工作。 怎么了?

注意console.log(droppedFiles); 在兩種情況下都看起來不錯並且完全相同(單擊,拖放)

  (function(window) { function triggerCallback(e, callback) { if(!callback || typeof callback !== 'function') { return; } var files; if(e.dataTransfer) { files = e.dataTransfer.files; } else if(e.target) { files = e.target.files; } callback.call(null, files); } function makeDroppable(ele, callback) { var input = document.createElement('input'); input.setAttribute('type', 'file'); input.setAttribute('multiple', true); input.style.display = 'none'; input.addEventListener('change', function(e) { triggerCallback(e, callback); }); ele.appendChild(input); ele.addEventListener('dragover', function(e) { e.preventDefault(); e.stopPropagation(); ele.classList.add('dragover'); }); ele.addEventListener('dragleave', function(e) { e.preventDefault(); e.stopPropagation(); ele.classList.remove('dragover'); }); ele.addEventListener('drop', function(e) { e.preventDefault(); e.stopPropagation(); ele.classList.remove('dragover'); triggerCallback(e, callback); }); ele.addEventListener('click', function() { input.value = null; input.click(); }); } window.makeDroppable = makeDroppable; })(this); (function(window) { makeDroppable(window.document.querySelector('.demo-droppable'), function(files) { var output = document.querySelector('.output'); output.innerHTML = ''; for(var i=0; i<files.length; i++) { if(files[i].type.indexOf('image/') === 0) { output.innerHTML += '<img width="200" src="' + URL.createObjectURL(files[i]) + '" />'; } output.innerHTML += '<p>'+files[i].name+'</p>'; } }); })(this); 
  .demo-droppable { background: #08c; color: #fff; padding: 100px 0; text-align: center; } .demo-droppable.dragover { background: #00CC71; } 
 <div class="demo-droppable"> <p>Drag files here or click to upload</p> </div> <div class="output"></div> 

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM