ОБНОВЛЕНИЕ
Похоже, вы хотите взять объект File
из события drop
и назначить его элементу <input>
.К сожалению, вы не можете этого сделать.Только пользователь может выбирать файлы;вы не можете динамически изменять файлы, которые будут загружены, потому что браузеры запрещают JavaScript этой возможности по соображениям безопасности.
Поскольку вы сказали, что у вас есть область перетаскивания, я предполагаю, что вы используете и нацеливаетесь набраузер, который поддерживает перетаскивание.Обратите внимание, что не все браузеры поддерживают перетаскивание, поэтому мой пример здесь ограничен такими браузерами.
С помощью перетаскивания вы можете получить объект File
из события перетаскивания, и вам не нужноinput
element.
// when you attach the 'drop' event listener
var dropzone = document.getElementById('drag_area'); // <-- ID of your drag area
attachEvent(dropzone, 'drop', function(event) {
var dt = event.dataTransfer;
var fileList = dt.files;
var file = fileList[0]; // you would have to change this if you allow multi-file upload
uploadFile(file);
});
function uploadFile(fileToUpload) {
var xhr = new XMLHttpRequest();
xhr.open("POST", "url", true); // <-- provide the proper URL
var form_data = new FormData();
form_data.append('file', fileToUpload);
xhr.send(form_data);
}
function attachEvent(element, type, fn) {
if (element.addEventListener) {
element.addEventListener(type, fn, false);
} else if (element.attachEvent) {
element.attachEvent('on' + type, fn);
}
}
Обратите внимание, что это не на 100% совместимо с браузером.Некоторые браузеры не поддерживают загрузку файлов через XMLHttpRequest()
.Если вы хотите поддерживать эти браузеры, вам нужно сделать что-то другое.
Наконец, мой пример не рассматривает использование форм.Если вам нужен подход на основе форм, пожалуйста, дайте мне знать.Я могу помочь вам и в этом:)
Дайте мне знать, если у вас есть какие-либо вопросы.