1

Я пишу расширение, которое идеально читало бы файлы после их загрузки (через обычный процесс загрузки). Это возможно? Я могу получить имя файла через операции chrome.downloads, но я не могу найти способы чтения фактических байтов. Мне не нужно писать или перемещать их, просто читать.Доступ к файлам данных после загрузки в Chrome ...?

+0

В идеале вы не сможете прочитать ни один файл из файловой системы. Это будет нарушение безопасности. Если файл загружается/хранится во временной файловой системе, используемой HTML5, тогда это возможно. – user3613129

+0

@ user3613129 Как вы думаете, я мог бы как-то перехватить загрузку, чтобы управлять ею с помощью fs api? –

+0

Я так не думаю. Опять же, если ваше расширение сможет перехватить загрузку пользователя, это также будет нарушением безопасности. FS API имеет другой вариант использования. Он используется для записи/чтения в/из локальной файловой системы, где локальная файловая система означает временный защищенный путь, созданный браузером для этих операций. Просьба ознакомиться с API FS для получения дополнительной информации. – user3613129

ответ

1

Я столкнулся с одной и той же проблемой и, наконец, нашел легкое обходное решение для чтения содержимого загруженных файлов с расширения Chrome.

Вам просто нужно добавить разрешение file://* в вашем файле манифеста и как только вы путь вашего файла в системе (с chrome.downloads.search в filename собственности), сделать GET XMLHttpRequest к URL file://{filepath}.

+0

Умм, я пробовал это в firefox, и он, похоже, не работает. Код просто сжимается, как только я делаю 'xhr.open (« GET »,« file: /// Users/myuser/Downloads/myexistingfile », false)'. Он отлично работает, когда URL-адрес удален, поэтому звонок правильный. Можете ли вы перечислить массив 'permissions'? Возможно, FF является более ограничительным, чем Chrome ... –

+0

Nevermind, это потому, что локальные файлы не имеют таких же событий, как удаленные. Присоединившись к 'onreadystatechange', все работает так, как ожидалось. Большой! –

+0

.. или нет. Я все еще не могу прочитать фактические данные после завершения запроса, ответ всегда пуст в firefox. Неудовлетворительно. –

1

Нет, API загрузки не предоставляет способ доступа к содержимому файла.

Ближайшим для перехвата является API WebRequest, но в настоящий момент это также doesn't allow response access.

Больше всего вы можете сделать, это поймать запрос webRequest, отменить его и попробовать XHR самостоятельно, сохранив результат в некотором временном месте, таком как упомянутый API файловой системы. Это был бы ужасный UX, хотя (исходный запрос обрывается необъяснимо) и может не работать во всех случаях (поскольку XHR не может установить все заголовки для полной репликации запроса).

+0

Если я инициировал загрузку самостоятельно с помощью отдельного явного действия с помощью XHR (т. Е. Щелкнуть правой кнопкой мыши-> «загрузить с помощью MyExtension»), могу ли я затем предложить пользователю сохранить его в стандартной папке загрузки? –

+0

После этого вы могли бы вызывать 'chrome.downloads.download' – Xan

Смежные вопросы