Best way for sending file to user

M

Mark Mr

HI, I'm currently using the FasterCSV library to pull a bunch of data
from my database and send a .csv file to the user. Currently i start off
with

FasterCSV.open("app/models/" + @assessment.assessment + ".csv", "w") do
|csv|

write all the info to it, then i use

send_file ('app/models/' + @assessment.assessment + '.csv')

to send it. It saves the csv file on the server and then sends that file
to the user. Is there any way to send the csv file without saving it to
the server? Or is there a command i can use to delete the file after it
sends? I couldnt quite find any answers to what I'm trying to do yet.
Thanks alot if anyone has input :)
 
J

James Gray

HI, I'm currently using the FasterCSV library to pull a bunch of data
from my database and send a .csv file to the user. Currently i start
off
with

FasterCSV.open("app/models/" + @assessment.assessment + ".csv", "w")
do
|csv|

write all the info to it, then i use

send_file ('app/models/' + @assessment.assessment + '.csv')

to send it. It saves the csv file on the server and then sends that
file
to the user. Is there any way to send the csv file without saving it
to
the server?

Yes, if you can easily hold the data in memory. You could use
FasterCSV.generate() to get the data in a String. The use send_data()
instead of send_file() to dump it to the client.
Or is there a command i can use to delete the file after it
sends?

Sure, use the standard Tempfile library to allocate a file, write to
it, and then feed it to send_file().

James Edward Gray II
 
J

Jeremy Hinegardner

HI, I'm currently using the FasterCSV library to pull a bunch of data
from my database and send a .csv file to the user. Currently i start off
with

FasterCSV.open("app/models/" + @assessment.assessment + ".csv", "w") do
|csv|

write all the info to it, then i use

send_file ('app/models/' + @assessment.assessment + '.csv')

to send it. It saves the csv file on the server and then sends that file
to the user. Is there any way to send the csv file without saving it to
the server? Or is there a command i can use to delete the file after it
sends? I couldnt quite find any answers to what I'm trying to do yet.
Thanks alot if anyone has input :)

Use FasterCSV.new instead.

csv_buffer = StringIO.new
FasterCSV.new(csv_buffer) do |fcsv|
fcsv << row
end

send_buffer_to_user(csv_buffer.string)

enjoy,

-jeremy
 
M

Mark Mr

James said:
Yes, if you can easily hold the data in memory. You could use
FasterCSV.generate() to get the data in a String. The use send_data()
instead of send_file() to dump it to the client.


Thanks, I used the generate option to get it to work, never used
send_data before so thanks for letting me know about that one :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,066
Latest member
VytoKetoReviews

Latest Threads

Top