Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Display Image after drag and drop on html page

I am implementing Drag and Drop Images Control using JQuery/JS. What has been accomplished is that user drag some image file and drop into html page. After dropping file, I only show filename and its size.

What I need to display image on the page as well. But I am not able to get image file content in jquery.

Following is code which i have written:

function handleFileUpload(files, obj) {
for (var i = 0; i < files.length; i++) {
    var fd = new FormData();
    fd.append('file', files[i]);

    var status = new createStatusbar(obj); //Using this we can set progress.
    status.setFileNameSize(files[i].name, files[i].size);
    sendFileToServer(fd, status);

}
}
$(document).ready(function () {
var obj = $("#dragandrophandler");
obj.on('dragenter', function (e) {
    e.stopPropagation();
    e.preventDefault();
    $(this).css('border', '2px solid #0B85A1');
});
obj.on('dragover', function (e) {
    e.stopPropagation();
    e.preventDefault();
});
obj.on('drop', function (e) {

    $(this).css('border', '2px dotted #0B85A1');
    e.preventDefault();
    var files = e.originalEvent.dataTransfer.files;

    //We need to send dropped files to Server
    handleFileUpload(files, obj);
});
$(document).on('dragenter', function (e) {
    e.stopPropagation();
    e.preventDefault();
});
$(document).on('dragover', function (e) {
    e.stopPropagation();
    e.preventDefault();
    obj.css('border', '2px dotted #0B85A1');
});
$(document).on('drop', function (e) {
    e.stopPropagation();
    e.preventDefault();
});

});

On debugging function handleFileUpload, it only displays following attributes:

enter image description here

Can you help in this regard?

Thanks

like image 505
Azeem Avatar asked Dec 05 '13 15:12

Azeem


People also ask

What is drag and drop in HTML?

In HTML, any element can be dragged and dropped. Drag the W3Schools image into the rectangle. Drag and drop is a very common feature. It is when you "grab" an object and drag it to a different location.

How do you drag and drop answers on a website?

Simply you need to grab an object and put it at the place you want to. This feature is commonly used by many of the online examination websites wherein you have the options to pick up the correct answer, drag it to the answers place holder and drop it. Drag and drop are a part of the HTML 5 standard.

How do you Drop data from an element in HTML?

By default, data/elements cannot be dropped in other elements. To allow a drop, we must prevent the default handling of the element. This is done by calling the event.preventDefault () method for the ondragover event: When the dragged data is dropped, a drop event occurs.

How to make a rectangle for image insertion in HTML?

We have given a rectangle area and an image, the task is to drag the image and drop it into the rectangle. We have to enable ondrop=”drop (event)” and ondragover=”allowDrop (event)” to make the rectangle for image insertion. The image link is inserted in the HTML page using <img> src attribute.


Video Answer


2 Answers

I haven't tried it out, but you're making use of the HTML5 File API. Your image is an instantiation of the File class, which itself is a subclass of Blob. Using the FileReader you can access the file's contents. This article over at the MDN links to another article in the network which shows how to use it: Showing thumbnails of User-selected images

Basically, you access the contents like so:

function handleFileUpload( files, obj ) {
    for( var i = 0; i < files.length; i++ ) {
        // ... your other code
        var reader = new FileReader();
        reader.onload = function(){
            // Should look like data:,<jibberish_data> based on which method you called
            console.log(e.target.result);
        };
        reader.readAsDataURL(files[i]);
    }
}
like image 177
Kiruse Avatar answered Oct 24 '22 11:10

Kiruse


So, here is how I resolved the issue:

function handleFileUpload(files, obj) {
for (var i = 0; i < files.length; i++) {
    var fd = new FormData();
    fd.append('file', files[i]);
    var status = new createStatusbar(obj); //Using this we can set progress.
    //status.setFileNameSize(files[i].name, files[i].size);
    //sendFileToServer(fd, status);

    var list = document.getElementById("image-list");
    var cell = document.createElement("td");
    var img = document.createElement("img");
    img.classList.add("obj");
    img.file = files[i];
    cell.setAttribute("align", "center");
    cell.setAttribute("valign", "bottom");
    cell.appendChild(img);
    list.appendChild(cell);

    var reader = new FileReader();
    reader.onload = (function (aImg) { return function (e) { aImg.src = e.target.result; }; })(img);
    reader.readAsDataURL(files[i]);
}
}
like image 28
Azeem Avatar answered Oct 24 '22 10:10

Azeem