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:
Can you help in this regard?
Thanks
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.
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.
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.
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.
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]);
}
}
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]);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With