"Content-disposition" -подобное поведение с Javascript - PullRequest
4 голосов
/ 08 апреля 2011

Мне было интересно, можно ли заставить браузер вести себя так же, как он это делает, когда видит "Content-disposition: attachment; filename = ...", используя только клиентский javascript? Это означает, что данные для сохраняемого файла доступны только на стороне клиента.

т.е. Предположим, у нас есть массив JavaScript, только на стороне клиента,

var data = [
              ["aa","bb","cc","dd","ee","ff","gg","hh","ii"]
              [ 1,   2,   3,   4,   5,   6,   7,   8,   9],
              ..
           ];

и я хочу сохранить этот массив в виде текстового файла на компьютере пользователя. У пользователя должно быть запрошено имя файла (т.е. я НЕ пытаюсь обойти настройки безопасности браузера или что-то в этом роде).

Это выполнимо без сохранения массива во временном файле сервера и повторного запроса на возврат этого временного файла пользователю? Если нет простого ответа на этот вопрос - любые идеи, ключевые слова Google или ссылки очень ценятся.

Ответы [ 4 ]

1 голос
/ 08 июля 2014
var YourTextData = "text data here";
window.location.href = "data:application/octet-stream," + encodeURIComponent(YourTextData);
1 голос
/ 08 апреля 2011

AFAIK, вы не можете сделать это хорошо, используя Javascript любым способом кроссбраузерности.

Если вы действительно не хотите использовать сервер, вы можете создать гибридное решение с использованием Flash.По сути, вы должны создать собственный элемент управления Flash, с которым вы будете взаимодействовать через Javascript (ExternalInterface), а затем элемент управления Flash инициирует операцию «сохранения файла».

Вот статья на эту тему: Сохранитьфайл локально с помощью Flash Player 10

1 голос
/ 13 апреля 2012

Взгляните на dowloadify : используется метод, предложенный @ Adam

1 голос
/ 08 апреля 2011

Вы не можете сделать это с помощью чистого JavaScript-решения - вам нужно, чтобы файл отправлялся с сервера.

Но для этого вам не нужно иметь «физический» файл на сервере.Вы можете сохранить вашу строку данных в памяти и записать в поток ответов из памяти.Но вы не получите более подробного ответа о том, как это сделать, не сообщив нам, с какой серверной технологией вы работаете.

...