nickola105
@nickola105
начинающий

Как передать файл на сервер с drag&drop?

Ребятушки, еще раз все привет.
Есть две вот такие функции. Одна сохраняет фото полученное с камеры, другая - с drop области когда юзер скинул скажем с рабочего стола в браузе

function savephoto() {
            var utf8 = atob(picture),
                array = [];
            //---
            for(var i = 0; i < utf8.length; i++)
                array.push(utf8.charCodeAt(i));
            var myBlob = new Blob([new Uint8Array(array)], {type: 'image/png'});
            var file = new File([myBlob], 'user-photo')
            inputPhoto.files[0] = file;
            console.log(inputPhoto.files[0]);
    }


(function dragDropLoad() {
        var dropbox;
        dropbox = document.querySelector('#dropbox');

        dropbox.addEventListener('dragenter', dragenter, false);
        dropbox.addEventListener('dragover', dragover, false);
        dropbox.addEventListener('drop', drop, false);

        function dragenter(e) {
            e.stopPropagation();
            e.preventDefault();
        }

        function dragover(e) {
            e.stopPropagation();
            e.preventDefault();
        }

        function  drop(e) {
            e.stopPropagation();
            e.preventDefault();

            var dt = e.dataTransfer;
            var file = dt.files[0];
        if (file) {
            createimage(file);
            inputPhoto.files[0] = file;
            console.log(inputPhoto.files[0]);
        }

        }
        function createimage(file) {
            var imgUser = document.querySelector('.output-input img');
            var uploadWrap = document.querySelector('.upload-wrap');
            uploadWrap.style.display = 'none';
            imgUser.style.display = 'block';
            imgUser.src = window.URL.createObjectURL(file);
            imgUser.onload = function() {
                window.URL.revokeObjectURL(this.src);

            }
        }
    }());

вот этой строкой (inputPhoto.files[0] = file;), как я думаю записываю в инпут формы типа файл ту саму картинку, по крайней мере в консоль вывожу и вижу что размер есть, объект есть.
Однако при отправке формы, бекенд не получает файл.
В чем может быть проблема?
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 1
dummyman
@dummyman
диссидент-схизматик
как я думаю записываю в инпут формы типа файл ту саму картинку, по крайней мере в консоль вывожу и вижу что размер есть, объект есть.

Нет, вы не правильно думаете. Картинку вы видите, но file содержит лишь url вида file://... - этого достаточно чтобы файл отобразить, но не достаточно, например, чтобы отправить ее аяксом.
Чтобы прочитать картинку (получить блоб) необходимо использовать FileReader.
UPD. чуть переформулировал.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы