getAsFile возвращает ноль в событии onPaste при копировании встроенного изображения из outlook - PullRequest
1 голос
/ 15 января 2020

Мой клиент часто получает электронные письма в Outlook со скриншотами, встроенными в текст. Я создаю им веб-сайт для отслеживания заказов на работу, и они хотят скопировать / вставить из электронного письма в веб-страницу, которую я создаю. (Они используют Chrome Версия 79.0.3945.117 (Official Build) (64-bit) и Microsoft Office 365 ProPlus Outlook Версия 1902 (Build 11328.20492 Click-to-Run))

Когда они выбирают весь контент электронной почты, данные в e.clipboardData.items не содержат никаких ссылок на изображение. Он включает в себя только текст (в обычном, rte и html форматах), а коллекция файлов имеет длину 0.

Когда они выбирают одно изображение в Outlook и копируют / вставляют его в мою форму, данные в e.clipboardData.items включают в себя rte, html и типы файлов. Однако коллекция файлов по-прежнему имеет длину 0. Когда я пытаюсь вызвать getAsFile() для элемента с типом файла (и типом изображения / png ) он возвращает null.

Если клиент щелкнет правой кнопкой мыши по изображению и сохранит его, они могут загрузить его на мой элемент управления input type=file, но я пытаюсь сэкономить им некоторые усилия, поскольку они делают это несколько раз в день.

У меня есть текстовое поле с событием onpaste:

<textarea name="maincontent_0$txtDetails" rows="2" cols="20" id="maincontent_0_txtDetails" class="orderFormDetails" onpaste="onPaste(event)"></textarea>

и элементом управления вводом файла:

<input type="file" name="maincontent_0$fuNewAttachment" id="maincontent_0_fuNewAttachment">

onpaste Событие определяется следующим образом:

        function onPaste(e)
        {
            var items = e.clipboardData.items;

            const dT = new ClipboardEvent('').clipboardData || // Firefox < 62 workaround exploiting https://bugzilla.mozilla.org/show_bug.cgi?id=1422655
                       new DataTransfer();

            for (var i = 0; i < items.length; i++)
            {
                if (items[i].kind == "file")
                {
                    var blob = items[i].getAsFile();
                    if (blob != null)
                    {
                        dT.items.add(blob);
                    }
                }
            }
            if (dT.items.length > 0)
            {
                var uploadField = document.getElementById("maincontent_0_fuNewAttachment");
                uploadField.files = dT.files;
            }
        }

Если я Из данных html вместо данных файла я могу получить место на жестком диске пользователя, где кэшируется изображение, но это бесполезно для меня, так как я не могу получить фактическое содержимое файла.

I Также пытались использовать перетаскивание, чтобы загрузить изображение из Outlook и столкнуться с аналогичной проблемой (коллекция e.dataTransfer.files пуста, а коллекция e.dataTransfer.items содержит только html с локальным URL-адресом изображения, а не его содержимым. .)

Что я могу сделать, чтобы получить доступ к содержимому изображения, или Outlook просто не отправляет его?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...