class CollectionsController < ApplicationController
+ include ActionController::Live
+
skip_around_filter(:require_thread_api_token,
only: [:show_file, :show_file_links])
skip_before_filter(:find_object_by_uuid,
end
if usable_token.nil?
return # Response already rendered.
- elsif params[:file].nil? or not file_in_collection?(coll, params[:file])
+ elsif params[:file].nil? or not coll.manifest.has_file?(params[:file])
return render_not_found
end
opts = params.merge(arvados_api_token: usable_token)
Rack::Mime::MIME_TYPES[ext] || 'application/octet-stream'
self.response.headers['Content-Length'] = params[:size] if params[:size]
self.response.headers['Content-Disposition'] = params[:disposition] if params[:disposition]
- self.response_body = file_enumerator opts
+ begin
+ file_enumerator(opts).each do |bytes|
+ response.stream.write bytes
+ end
+ ensure
+ response.stream.close
+ end
end
def sharing_scopes
return nil
end
- def file_in_collection?(collection, filename)
- target = CollectionsHelper.file_path(File.split(filename))
- collection.manifest.each_file.any? do |file_spec|
- CollectionsHelper.file_path(file_spec) == target
- end
- end
-
def file_enumerator(opts)
FileStreamer.new opts
end