You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2010/12/07 12:40:42 UTC
[PATCH core 3/3] Added Content-Disposition header for blob, so client can identify content that server is streaming
From: Michal Fojtik <mf...@redhat.com>
---
server/lib/deltacloud/helpers/blob_stream.rb | 6 +++++-
server/server.rb | 1 +
2 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/server/lib/deltacloud/helpers/blob_stream.rb b/server/lib/deltacloud/helpers/blob_stream.rb
index 45fdbef..a99e6c2 100644
--- a/server/lib/deltacloud/helpers/blob_stream.rb
+++ b/server/lib/deltacloud/helpers/blob_stream.rb
@@ -28,7 +28,11 @@ begin
#the client guess and if they can't they SHOULD default to
#'application/octet-stream' anyway as per:
#http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1
- EM.next_tick { env['async.callback'].call [200, {'Content-Type' => "#{params['content_type']}", 'Content-Length' => "#{params['content_length']}"}, body] }
+ EM.next_tick { env['async.callback'].call [200, {
+ 'Content-Type' => "#{params['content_type']}",
+ 'Content-Disposition' => params["content_disposition"],
+ 'Content-Length' => "#{params['content_length']}"}, body]
+ }
#call the driver from here. the driver method yields for every chunk of blob it receives. We then
#use body.call to write that chunk as received.
driver.blob_data(credentials, params[:bucket], params[:blob], params) {|chunk| body.call ["#{chunk}"]} #close blob_data block
diff --git a/server/server.rb b/server/server.rb
index 076859d..a3e2289 100644
--- a/server/server.rb
+++ b/server/server.rb
@@ -516,6 +516,7 @@ get '/api/buckets/:bucket/:blob/content' do
@blob = driver.blob(credentials, { :id => params[:blob], 'bucket' => params[:bucket]})
params['content_length'] = @blob.content_length
params['content_type'] = @blob.content_type
+ params['content_disposition'] = "attachment; filename=#{@blob.id}"
BlobStream.call(env, credentials, params)
end
--
1.7.3.2