Кнопка «Сохранить как» в IE, сохранить файл на стороне клиента - PullRequest
3 голосов
/ 10 января 2012

Есть ли способ сделать кнопку, которая генерирует текстовый / xml-файл, устанавливает тип контента для загрузки приложения, добавляет вложение и т. Д. На стороне клиента? То, что я хочу, это кнопка «загрузить» на моей странице, которая сохраняет XML-файл. Вот как я делаю то же самое на стороне сервера:

response.StatusCode = 200;
        response.ContentEncoding = Encoding.UTF32;
        response.AddHeader("content-disposition", "attachment; filename=" + fileName);
        response.AddHeader("Content-Transfer-Encoding", "binary");
        response.AddHeader("Content-Length", response.ContentEncoding.GetByteCount(xmlString).ToString());
        response.ContentType = "application-download";
        response.Write(xmlString);    

1 Ответ

0 голосов
/ 11 января 2012

Если вы хотите создать файл в jQuery / Javascript и иметь возможность сохранить его на диск из браузера, ответ прост: НЕТ. Javascript не разрешается (по соображениям безопасности) сохранять на диск, а также не заставлять браузер создавать всплывающее окно «Сохранить как ...» для чего-то локально созданного. У вас есть более простое решение вашего вопроса. В вашем примере вы создаете XML-файл и отправляете его как вложение с сервера. Почему бы вам просто не нажать кнопку для загрузки файла, созданного сервером? Вы не можете сделать это простым ajax, потому что он не может инициировать загрузку в браузере, но вы можете использовать старый «трюк загрузки iframe», чтобы запустить загрузку на той же странице.

function download(url_to_your_creating_file_servlet){
iframe = document.createElement('iframe');  
iframe.style.visibility = 'hidden';
document.body.appendChild(iframe);
iframe.src = url_to_your_creating_file_servlet;
}

Или, если вы не возражаете, чтобы открыть другое окно / вкладку (немного страшнее), это также работает:

<a href="url_to_your_creating_file_servlet" target="blank"> Download </a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...