xml file download prompt instead of displaying in browser?

Hello all,

I am trying to export some xml files on the web app as a download, but Firefox/chrome/ie/safari all just display the xml content on themselves. How can I have the download prompt? Like I am downloading a .exe file?

Thank You

Hi Nik,

This is what we have and it seems to work in all the browsers

     response.body = xml.to_s      response.content_type = "application/x-generated-xml-backup";      filename = "Filename.xml"      response.headers['Content-disposition'] = "Attachment;
filename=\"#{filename}\""      render :text => xml.to_s

Cheers Simon

Thanks Simon,

Where should I put this code? I have in my controller:

#Controller

def exportxml     if params[:item_ids]         @items = Item.find(params[:item_ids])

        respond_to do |format|         format.xml {render :layout=>false}         end     end end

Cheers! Nik

def exportxml          if params[:item_ids]        @items = Item.find(params[:item_ids])

       respond_to do |format|          format.xml {              send_data @items.to_xml, :filename => "items.xml"          }        end    end end

Hi Zuo,

Thank You! It works. Brilliantly. And thank you, too Simon!

All the best, Nik

Hi Zuo,

It works! But the XML structure I used in the builder is now lost. The XML file is now filled with the data from the columns.

Is there a way I can use my builder and your method?

Does anyone have an idea on this ?

Thanks! Nik

overwrite the to_xml method in your model or yield the builder object as part of the to_xml

@item.to_xml do |xml|     # builder stuffs end

Hi Zuo!

Thank you again for your help! I did this and it says that a "}" is missing right after * as in :filename=>*

def exportxml     if params[:item_ids] ||=         @items = Item.find(params[:item_ids])         respond_to do |format|           format.xml {send_data @items.to_xml do |xml|            xml.instruct!               xml.product do               for t in @items                 xml.lineitem(:id=>t.name) do                   xml.name(t.name)                   xml.in(t.tradeIn/85.to_i)                   end                   xml.logginginfo do                     xml.lognote(t.note)                   end                 end               end             end           end         :filename=> "items.xml"}         end     end   end

The builder stuff is copied straight from the exportxml.xml.builder.

And I don't know if this is helpful -- if I removed the :filename=>"items.xml" from above, it downloads! Yet, it again saves the file without extension and gives me the array of the columns of the table instead of my builder scheme.

I am sorry to have to ask for your help again.

Thank you