Я работаю над приложением (в Node.js, что не имеет отношения к этому случаю), что позволяет пользователю загружать изображение. Он отлично работает с использованием формы с полем ввода (type="file").
Однако, я хочу, чтобы вы могли загружать изображение, используя вместо этого перетаскивание HTML5. Насколько я понял, можно перетащить изображение клиенту, а миниатюра изображения отображается в div. Однако мне действительно нужна помощь в том, чтобы загрузить файл.
Дело в том, что я хочу использовать форму, которую я использую прямо сейчас, и (каким-то образом) передать путь файла к полю ввода, то есть поток будет работать точно так же, как сейчас, но вместо того, чтобы выбирать файл, просматривая его. Я хочу привязать его к полю ввода путем перетаскивания.
В приведенном ниже js-коде для перетаскивания файл, перетаскиваемый клиенту, хранится в переменной "файл", и я могу использовать "file.name", "file.type" и "file.size" точно так же, как и раньше, с формой. Однако я не могу получить доступ к файлам "путь" (file.path), который делает невозможным доступ к стороне файлового сервера для загрузки так же, как я делаю это с тех пор.
Вопрос в том, можно ли передать объект файла в поле ввода после того, как файл был перенесен на клиент, чтобы я мог нажать "отправить" и загрузить файл? Если да, как это можно сделать?
Спасибо заранее!
dropbox, а также форму, которую я использую для загрузки файлов:
<div id='upload'>
<article>
<div id='holder'>
<p id='status'>File API and FileReader API not supported</p>
</div>
</article>
<form method='post' enctype='multipart/form-data' action='/file-upload'>
<p>
<input type='file' name='thumbnail'>
</p>
<p>
<input type='submit'>
</p>
</form>
</div>
код для перетаскивания:
uploadImage: function(){
var holder = document.getElementById('holder'),
state = document.getElementById('status');
if (typeof window.FileReader === 'undefined') {
state.className = 'fail';
} else {
state.className = 'success';
state.innerHTML = 'File API & FileReader available';
}
holder.ondragover = function () { this.className = 'hover'; return false; };
holder.ondragend = function () { this.className = ''; return false; };
holder.ondrop = function (e) {
this.className = '';
e.preventDefault();
var file = e.dataTransfer.files[0],
reader = new FileReader();
reader.onload = function (event) {
holder.style.background = 'url(' + event.target.result + ') no-repeat center';
};
reader.readAsDataURL(file);
return false;
};
},