Domanda

Ho un'azione del controller che consente a un utente di scaricare un file con estensione .ppt. Non è proprio un binario di powerpoint, solo un formato xml che powerpoint può leggere. il file viene scaricato dall'azione show di un controller chiamato ElementsController, ma l'azione show non è effettivamente definita nel controller, tuttavia esiste un file modello per esso in app / views / elements / show.ppt.builder. Ho il Mime :: Type registrato in config / initializer / mime_types.rb come tale:

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

e il file viene scaricato correttamente e si apre con powerpoint su un sistema Windows, ma il problema è il nome file. il nome del file è 3.ppt dove tre è il parametro id nell'URL. Vorrei sapere se esiste un modo per impostare il nome file su qualcosa di un po 'più descrittivo di 3.ppt.

thx,

-C

È stato utile?

Soluzione

Puoi utilizzare send_data :

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

Un altro vantaggio di questo è che puoi usare x-sendfile, in modo che tu non sia in attesa / thin mentre il client scarica i dati.


Un'altra opzione sarebbe quella di avere un percorso come:

/elements/3/files/foo.ppt

Quindi nel tuo metodo show per FilesController puoi inviare qualunque sia il parametro id.

Altri suggerimenti

Un possibile esempio:

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. Questa è una risposta a una domanda molto antica, ma a partire da Rails 3.2 il modo più semplice è impostarlo come:

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

Documento API di origine

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top