the client, and make sure the MIME type is correct for trace files.
def data
trace = Trace.find(params[:id])
def data
trace = Trace.find(params[:id])
- if trace.public? or (@user and @user == trace.user)
- send_data(File.open("/home/osm/gpx/#{trace.id}.gpx",'r').read , :filename => "#{trace.id}.gpx", :type => 'text/plain', :disposition => 'inline')
+ if trace and (trace.public? or (@user and @user == trace.user))
+ send_file(trace.trace_name, :filename => "#{trace.id}.gpx", :type => trace.mime_type, :disposition => 'attachment')
+ else
+ render :nothing, :status => 404
def picture
trace = Trace.find(params[:id])
def picture
trace = Trace.find(params[:id])
- send_data(trace.large_picture, :filename => "#{trace.id}.gif", :type => 'image/gif', :disposition => 'inline') if trace.public? or (@user and @user == trace.user)
+ if trace and (trace.public? or (@user and @user == trace.user))
+ send_file(trace.large_picture_name, :filename => "#{trace.id}.gif", :type => 'image/gif', :disposition => 'inline')
+ else
+ render :nothing, :status => 404
+ end
end
def icon
trace = Trace.find(params[:id])
end
def icon
trace = Trace.find(params[:id])
- send_data(trace.icon_picture, :filename => "#{trace.id}_icon.gif", :type => 'image/gif', :disposition => 'inline') if trace.public? or (@user and @user == trace.user)
+ if trace and (trace.public? or (@user and @user == trace.user))
+ send_file(trace.icon_picture_name, :filename => "#{trace.id}_icon.gif", :type => 'image/gif', :disposition => 'inline')
+ else
+ render :nothing, :status => 404
+ end
"/home/osm/gpx/#{id}.gpx"
end
"/home/osm/gpx/#{id}.gpx"
end
+ def mime_type
+ return `file -bi #{trace_name}`.chomp
+ end
+
def to_xml_node
el1 = XML::Node.new 'gpx_file'
el1['id'] = self.id.to_s
def to_xml_node
el1 = XML::Node.new 'gpx_file'
el1['id'] = self.id.to_s