Файл надо отправить ajaxом, BLOB. Сейчас файл считываю в момент добавления в форму, результат сохраняю в поле hidden. Криво, но пока только так осилил.
Сделать чтение файла в момент самой отправки (button) я так и не смог. Из-за того что FileReader асинхронный и запутался с коллбеками. Как переписать мой код, чтобы избавиться от
document.getElementById('file').addEventListener('change', function (e){
});
а весь код чтения добавить в функция send()?
<form method="post" action="#">
<input type="text" id="name">
<input type="text" id="price">
<input type="file" id="file">
<input type="hidden" id="file_data">
<input type="button" value="Send" onclick="send()">
</form>
function send(){
let data = {
name: document.getElementById('name').value,
price: document.getElementById('price').value,
file: document.getElementById('file_data').value
};
console.log(data);
}
document.getElementById('file').addEventListener('change', function (e){
let file = e.target.files[0];
let reader = new FileReader();
reader.onload = (function (file) {
return function (e) {
let r = e.target;
document.getElementById('file_data').value = r.result;
};
})(file);
reader.readAsDataURL(file);
});