Можно ли как-нибудь создать текстовый файл на стороне клиента и предложить пользователю загрузить его без какого-либо взаимодействия с сервером? Я знаю, что не могу писать напрямую на их машину (безопасность и все), но могу ли я создать и предложить им сохранить ее?
javascript
file
web-applications
client-side
Джозеф Силбер
источник
источник
Ответы:
Вы можете использовать данные URI. Поддержка браузера варьируется; см. википедию . Пример:
Поток октетов должен вызвать запрос на загрузку. В противном случае он, вероятно, откроется в браузере.
Для CSV вы можете использовать:
Попробуйте демоверсию jsFiddle .
источник
Простое решение для HTML5 готовых браузеров ...
Применение
источник
download
атрибутом вы можете указать имя файла ;-)txt
расширение, только если вы не указали расширение в имени файла. Если вы сделаетеdownload("data.json", data)
это будет работать как ожидалось.Все вышеперечисленные решения не работают во всех браузерах. Вот что в итоге работает в IE 10+, Firefox и Chrome (и без jQuery или любой другой библиотеки):
Обратите внимание, что в зависимости от вашей ситуации вы также можете вызвать URL.revokeObjectURL после удаления
elem
. В соответствии с документами для URL.createObjectURL :источник
Failed: network error
в Chrome. Этот работает хорошо.Все вышеприведенные примеры прекрасно работают в Chrome и IE, но не работают в Firefox. Пожалуйста, рассмотрите добавление якоря к телу и удаление его после щелчка.
источник
a.click()
строке, потому что он считает URL-адрес большого двоичного объекта перекрестным.Я счастливо использую FileSaver.js . Его совместимость довольно хорошая (IE10 + и все остальное), и он очень прост в использовании:
источник
<a>
.Следующий метод работает в IE11 +, Firefox 25+ и Chrome 30+:
Смотрите это в действии: http://jsfiddle.net/Kg7eA/
Firefox и Chrome поддерживают URI данных для навигации, что позволяет нам создавать файлы путем перехода к URI данных, в то время как IE не поддерживает его в целях безопасности.
С другой стороны, в IE есть API для сохранения большого двоичного объекта, который можно использовать для создания и загрузки файлов.
источник
Это решение извлекается непосредственно из репозитория github tiddlywiki (tiddlywiki.com). Я использовал Tiddlywiki почти во всех браузерах, и это работает как шарм:
Github repo: Скачать модуль заставки
источник
Решение, которое работает на IE10: (Мне нужен CSV-файл, но достаточно изменить тип и имя файла на TXT)
источник
Если вы просто хотите преобразовать строку, которая будет доступна для скачивания, вы можете попробовать это с помощью jQuery.
источник
Пакет js-file-download с github.com/kennethjiang/js-file-download обрабатывает крайние случаи для поддержки браузера:
Просмотрите исходный код, чтобы увидеть, как он использует методы, упомянутые на этой странице.
Установка
Применение
источник
Как упоминалось ранее, filesaver - отличный пакет для работы с файлами на стороне клиента. Но это не очень хорошо с большими файлами. StreamSaver.js является альтернативным решением (которое указано в FileServer.js), которое может обрабатывать большие файлы:
источник
источник
По состоянию на апрель 2014 года API-интерфейсы FileSytem могут быть не стандартизированы в W3C. Думаю, любой, кто смотрит на решение с помощью blob, должен быть осторожен.
HTML5 рушится
Список рассылки W3C в FileSytem API
источник
На основании ответа @Rick, который был действительно полезен.
Вы должны указать строку,
data
если хотите поделиться ей следующим образом:`Извините, я не могу комментировать ответ @ Рика из-за моей низкой репутации в StackOverflow.
Предложение по редактированию было передано и отклонено.
источник
Мы можем использовать URL API, в частности URL.createObjectURL () , и Blob API для кодирования и загрузки почти ничего.
Если ваша загрузка небольшая, это работает нормально:
Если загрузка велика, вместо использования DOM лучше создать элемент ссылки с параметрами загрузки и вызвать щелчок.
Обратите внимание, что элемент ссылки не добавляется к документу, но щелчок работает в любом случае! Это позволяет создать загрузку многих сотен Мо таким образом.
Бонус! Скачивайте любые циклические объекты , избегайте ошибок:
С помощью https://github.com/douglascrockford/JSON-js/blob/master/cycle.js
В этом примере загрузка
document
объекта осуществляется в формате json.источник
Вы даже можете сделать один лучше, чем просто URI - используя Chrome, вы также можете предложить имя файла, как описано в этом сообщении в блоге о присвоении имени загрузке при использовании URI .
источник
Эта функция ниже работает.
источник
Следующий метод работает в IE10 +, Edge, Opera, FF и Chrome:
Итак, просто вызовите функцию:
источник
Для меня это сработало идеально, с тем же именем файла и расширения загружается
<a href={"data:application/octet-stream;charset=utf-16le;base64," + file64 } download={title} >{title}</a>
'title' - это имя файла с расширением, т. е.
sample.pdf
,waterfall.jpg
и т. д.«file64» - это содержимое base64, например,
Ww6IDEwNDAsIFNsaWRpbmdTY2FsZUdyb3VwOiAiR3JvdXAgQiIsIE1lZGljYWxWaXNpdEZsYXRGZWU6IDM1LCBEZW50YWxQYXltZW50UGVyY2VudGFnZTogMjUsIFByb2NlZHVyZVBlcmNlbnQ6IDcwLKCFfSB7IkdyYW5kVG90YWwiOjEwNDAsIlNsaWRpbmdTY2FsZUdyb3VwIjoiR3JvdXAgQiIsIk1lZGljYWxWaXNpdEZsYXRGZWUiOjM1LCJEZW50YWxQYXltZW50UGVyY2VudGFnZSI6MjUsIlByb2NlZHVyZVBlcmNlbnQiOjcwLCJDcmVhdGVkX0J5IjoiVGVycnkgTGVlIiwiUGF0aWVudExpc3QiOlt7IlBhdGllbnRO
источник
Я бы использовал
<a></a>
тег, а затем установитьhref='path'
. Затем поместите изображение между<a>
элементами, чтобы я мог видеть его. Если вы хотите, вы можете создать функцию, которая изменитhref
так, что она будет не просто той же ссылкой, а динамической.Присвойте
<a>
тегуid
также значение, если вы хотите получить к нему доступ с помощью JavaScript.Начиная с версии HTML:
Теперь с JavaScript:
источник
Если файл содержит текстовые данные, я использую технику, чтобы поместить текст в элемент textarea и сделать так, чтобы пользователь выделил его (щелкните в текстовой области, затем ctrl-A), а затем скопируйте и вставьте в текстовый редактор.
источник