почему? format = csv файлы не имеют расширения - PullRequest
2 голосов
/ 20 января 2010

У меня есть стандартное приложение релакс рельсов.

format.html { @users = User.find(:all, :limit => 10)}
format.csv { @users = User.find(:all, :limit => 10) }

Когда URL-адрес

http://localhost:3000/users.csv

Я получаю файл с именем users.csv.

Однако, если URL-адрес

http://localhost:3000/users?format=csv

тогда файл, который я получаю, имеет имя пользователя. Я хотел бы, чтобы имя файла было users.csv.

Ответы [ 4 ]

2 голосов
/ 20 января 2010

Это имя файла браузера по умолчанию, входящее в игру. Браузер ничего не знает о значении параметра формата. Он просто видит, что ресурс, к которому осуществляется доступ, называется «пользователи», поэтому по умолчанию используется имя этого файла.

В первом примере запрашиваемый ресурс называется users.csv, поэтому он использует его в качестве имени файла по умолчанию.

Вы также можете заглянуть в HTTP-заголовок Content-Disposition. Это приведет к тому, что браузер предложит пользователю сохранить файл с указанным именем файла по умолчанию (хотя пользователь может изменить его) вместо отображения файла в браузере. Таким образом, ваш ресурс мог бы быть http://localhost:3000/users?format=csv,, но по умолчанию имя файла foo.csv с таким заголовком:

Content-disposition: attachment; filename=foo.csv

Проверьте эту ссылку Microsoft для получения дополнительной информации. Концепция для рельсов такая же, как и для любой технологии HTTP.

0 голосов
/ 20 января 2010

Это можно узнать как стандартное поведение MSIE.Он игнорирует параметр filename заголовка Content-Disposition (если вы его установили самостоятельно).Вам действительно нужно добавить полное имя файла в качестве pathinfo URL, если вы хотите, чтобы оно также работало в этом браузере.Все остальные браузеры используют заголовок Content-Disposition, как и ожидалось.

0 голосов
/ 20 января 2010

Вы можете отправить заголовок Content-disposition с параметром filename, чтобы предложить пользователю имя файла по умолчанию.Например, Content-dispostion: attachment; filename=users.csv.

По умолчанию браузер обычно использует в качестве имени файла последний компонент части пути URL (часть перед запросом, которая начинается с ?).Некоторые браузеры, такие как Safari, также добавляют расширение на основе типа MIME, если они не верят, что текущее расширение соответствует типу MIME, и они знают, какое расширение использовать.

0 голосов
/ 20 января 2010

Установите заголовок ответа Content-Disposition на attachment; filename=users.csv.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...