Я играю с идеей создания полностью основанной на JavaScript утилиты zip / unzip, к которой любой сможет получить доступ из браузера. Они могут просто перетащить свой zip-архив прямо в браузер, и он позволит им загрузить все файлы внутри. Они также могут создавать новые zip-файлы, перетаскивая отдельные файлы внутрь.
Я знаю, что было бы лучше сделать это на стороне сервера, но этот проект просто для развлечения.
Перетаскивание файлов в браузер должно быть достаточно простым, если я воспользуюсь различными доступными методами. (Стиль Gmail)
Мы надеемся, что кодирование / декодирование будет в порядке. Я видел несколько zip-библиотек as3, поэтому уверен, что меня это устроит.
Моя проблема заключается в загрузке файлов в конце.
window.location = 'data:jpg/image;base64,/9j/4AAQSkZJR....'
это отлично работает в Firefox, но не в Chrome.
Я могу встроить файлы как изображения в Chrome <img src="data:jpg/image;ba.." />
, но файлы не обязательно будут изображениями. Они могут быть любого формата.
Может ли кто-нибудь придумать другое решение или какое-то обходное решение?
источник
Ответы:
Идеи:
Попробуйте
<a href="data:...." target="_blank">
(непроверенный)Используйте downloadify вместо URL-адресов данных (также будет работать для IE)
источник
Если вы также хотите дать файлу предлагаемое имя (вместо значения по умолчанию «загрузка»), вы можете использовать следующее в Chrome, Firefox и некоторых версиях IE:
И следующий пример показывает его использование:
источник
link.click()
вместоeventFire
-функции ... jsfiddle.net/ARTsinn/Ezx5mили:
источник
Хочу поделиться своим опытом и помочь кому-то застрять в загрузках, которые не работают в Firefox, и обновил ответ на 2014 год. Приведенный ниже фрагмент будет работать как в firefox, так и в Chrome, и он будет принимать имя файла:
источник
download
атрибут. В любом случае, спасибо, сейчас это так близко, насколько я могу.btoa
не определено (например, в проекте внешнего интерфейса node eslinted)const btxt = new Buffer(text).toString('base64'); const uri = 'data:text/csv;charset=utf-8;base64,' + btxt + ';'
Вот чистое решение JavaScript, которое я тестировал при работе в Firefox и Chrome, но не в Internet Explorer:
Кроссбраузерные решения, найденные до сих пор:
downloadify -> Требуется Flash
databounce -> Протестировано в IE 10 и 11 и у меня не работает. Требуется сервлет и некоторая настройка. (Неправильно определяет навигатор. Мне пришлось установить IE в режиме совместимости для тестирования, кодировка по умолчанию в сервлете, объект параметров JavaScript с правильным путем к сервлету для абсолютных путей ...) Для браузеров, отличных от IE, он открывает файл в том же окне.
download.js -> http://danml.com/download.html Еще одна похожая, но не проверенная библиотека. Утверждает, что это чистый JavaScript, не требующий сервлета или Flash, но не работает в IE <= 9.
источник
Есть несколько решений, но они зависят от HTML5 и еще не полностью реализованы в некоторых браузерах. Примеры ниже были протестированы в Chrome и Firefox (частично работает).
document.location.href
URI данных.<a href="your-data-uri" download="filename.txt">
для указания имени файла.источник
Объединяя ответы от @owencm и @ Chazt3n, эта функция позволит загружать текст из IE11, Firefox и Chrome. (Извините, у меня нет доступа к Safari или Opera, но, пожалуйста, добавьте комментарий, если вы попробуете, и это сработает.)
источник
Для тех, у кого есть проблемы в IE:
Проголосуйте за ответ от Йетти: сохранение холста локально в IE
источник
По сути, ваша проблема сводится к тому, что «не все браузеры это поддерживают».
Вы можете попробовать обходной путь и обслуживать распакованные файлы из объекта Flash, но тогда вы потеряете чистоту JS-only (в любом случае, я не уверен, можно ли в настоящее время «перетаскивать файлы в браузер» без какого-либо обходного пути Flash - это может быть функция HTML5?)
источник