2010-04-12 2 views
3

Я хочу, чтобы пользователь загружал текущее содержимое текстового поля в текстовый файл на своем компьютере. Раньше я создавал iframe, указывающий на URL с данными, который запускал бы диалог загрузки файлов. Однако на этот раз данные являются клиентскими.Как загрузить клиентский контент

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

ответ

5

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

В общем случае нет.

Возможно, с URL-адресом data:, как в ответе janmoesen (хотя вы должны быть кодировкой URL-адреса для включения в URL-адрес, или вы можете столкнуться с коррупцией, когда в данных появляется последовательность %nn).

Однако это непрактично для очень длинных данных, и оно недоступно в старых браузерах или IE. (IE8 позволяет использовать короткие URL-адреса данных для изображений, но не для прямой навигации). Поэтому, пока вы можете включить метод URL-адресов данных для улучшения процесса в браузерах, которые его поддерживают, вам все равно потребуется резервное решение для отправки формальных данные на серверную сторону, и при этом он возвращает обратно файл в ответ.

(По соображениям безопасности, то это должно быть разрешено только в POST запросе, и сервер должен включать Content-Disposition: attachment в ответ. Сценарий контент-эхо может дать вам проблемы кросс-сайт-сценариев в противном случае.)

6

Если вам не нужно работать в «старых браузерах», таких как IE, вы можете открыть новое окно с указанием местоположения 'data:text/plain,' + yourTextarea.value. Затем пользователь может сохранить этот файл с помощью меню «Файл/страница» или Ctrl + S.

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