Frage

Ich habe eine Controller -Aktion, mit der ein Benutzer eine Datei mit einer Erweiterung von .ppt herunterladen kann. Es ist nicht wirklich ein Powerpoint-Binär, nur ein XML-ISH-Format, das Powerpoint lesen kann. Die Datei wird aus der Show -Aktion eines Controllers namens ElementsController heruntergeladen. Die Show -Aktion ist jedoch nicht im Controller definiert. Es gibt jedoch eine Vorlagendatei in App/Ansichten/Elementen/show.ppt.builder. Ich habe den mime :: Typ registriert in config/Initializer/mime_types.rb als solche:

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

und die Datei lädt ordnungsgemäß herunter und wird mit PowerPoint in einem Windows -System geöffnet. Das Problem ist jedoch der Dateiname. Der Name der Datei ist 3.PPT, wobei drei der ID -Parameter in der URL ist. Ich würde gerne wissen, ob es eine Möglichkeit gibt, den Dateinamen auf etwas beschreibender als 3.PPT zu setzen.

Danke,

-C

War es hilfreich?

Lösung

Du könntest benutzen schicke Daten:

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

Ein weiterer Vorteil davon ist, dass Sie X-Sendfile verwenden können, damit Sie Mischgläubel/Dünn nicht warten, während der Client die Daten herunterlädt.


Eine andere Option wäre eine Route wie:

/Elements/3/files/foo.ppt

In Ihrer Show -Methode für den Dateicontroller können Sie dann alles senden, was der ID -Parameter sein würde.

Andere Tipps

Ein mögliches Beispiel:

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

OK. Dies ist eine Antwort für eine sehr alte Frage, aber ab Rails 3.2 ist es einfach, sie so zu setzen:

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

Quelle API Doc

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top