установка имени файла для загруженного файла в приложении rails - PullRequest
14 голосов
/ 06 марта 2009

У меня есть действие контроллера, которое позволяет пользователю загружать файл с расширением .ppt. На самом деле это не бинарный файл powerpoint, просто формат xml-ish, который может прочитать powerpoint. файл загружается из действия show контроллера, называемого ElementsController, но действие show фактически не определено в контроллере, однако для него есть файл шаблона в app / views / elements / show.ppt.builder. У меня есть Mime :: Type, зарегистрированный в config / initializers / mime_types.rb как таковой:

Mime::Type.register "multipart/related", :ppt

и файл загружается правильно, и открывается с PowerPoint в системе Windows, но проблема заключается в имени файла. имя файла 3.ppt, где три - это параметр id в URL. Я хотел бы знать, есть ли способ установить имя файла на что-то более описательное, чем 3.ppt.

ТНХ,

-C * +1010 *

Ответы [ 3 ]

24 голосов
/ 06 марта 2009

Вы можете использовать send_data :

send_data pptdata, :filename => 'your_file_name.ppt', 
   :disposition => 'inline', :type => "multipart/related"

Еще одним преимуществом этого является то, что вы можете использовать x-sendfile, так что вы не можете ждать, пока клиент загрузит данные.

<Ч />

Другой вариант будет иметь маршрут как:

/ элементы / 3 / файлы / foo.ppt

Затем в вашем методе show для FilesController вы можете отправить любой параметр id.

12 голосов
/ 06 октября 2010

Возможный пример:

def show
    @item = Item.find(params[:id])
    respond_to do |format|
        format.html # show.html.erb
        format.ppt {
            response.headers['Content-Disposition'] = "attachment; filename=\"#{@item.filename}.ppt\""
        } # show.ppt.erb
        format.xml  { render :xml => @item }
    end
end
4 голосов
/ 17 мая 2013

Хорошо. Это ответ на очень старый вопрос, но в Rails 3.2 самый простой способ - установить его следующим образом:

respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @product }
  format.csv { send_data @product.to_csv, :filename => "New-Product-filename.csv" }
  format.xls 
end

Исходный документ API

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