2009-03-05 13 views
7

Kullanıcının bir dosyayı .ppt uzantılı bir dosyayı indirmesine izin veren bir denetleyici eylemi var. Powerpoint'in okuyabileceği bir powerpoint ikili, sadece bir xml-ish formatı değil. dosya, ElementsController adlı bir denetleyicinin show eyleminden indirilir, ancak show eylemi denetleyicide gerçekten tanımlanmaz, ancak app/views/elements/show.ppt.builder öğesinde bunun için bir şablon dosyası vardır. Ben gibi config/başlatıcıları/mime_types.rb kayıtlı Mime :: Type vardır:Raylar uygulamasında indirilmiş bir dosya için dosya adını ayarlama

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

ve düzgün dosya indirme ve bir windows sistemi üzerinde powerpoint ile açılır, henüz sorun dosya adıdır. Dosya adı 3.ppt, burada üç URL'de id parametresidir. Dosya adını 3.ppt'den biraz daha betimleyici bir şeye ayarlamak için bir yol olup olmadığını bilmek istiyorum.

thx

-C

cevap

18

Şunları kullanabilirsiniz send_data:

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

bu diğer avantajı 'Eğer melez/ince değil mi olduğunuzu böylece x-sendfile kullanabileceği başka İstemci verileri indirirken beklemez. ne olursa olsun id parametresi gönderebilir FilesController için gösteri yönteminde

Sonra

/elements/3/files/foo.ppt:


Diğer bir seçenek gibi bir rota olacaktır olabilir.

+0

denetleyicide ve response_to do | format | öğesini tanımlamaktan kaçınmaya çalışıyorum. –

+0

Response_to ile ilgili sorun nedir? – jonnii

+0

Sorumu başka bir fikirle güncelledim. – jonnii

11

olası bir örneği:

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 
+0

Teşekkürler, bu cevap bana [kendi sorumu] cevap vermeme yardımcı oldu (http://stackoverflow.com/questions/12902052/rails-3-set-the-filename-in-a-respond-to/12902958). –

3

Ok. Bu çok eski bir soru için bir cevaptır, ancak en basit yolu ayarlamaktır Raylar 3.2 itibariyle bu gibi:

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 

Source API Doc

send_data sorun i yöntemini açmak zorunda kalacak olmasıdır