diff options
author | rajneeshksoni <soni.rajneesh@gmail.com> | 2023-02-09 16:44:16 +0300 |
---|---|---|
committer | Arun Raghavan <arun@arunraghavan.net> | 2023-02-09 22:04:07 +0300 |
commit | 994c79569e1fd5a8adb909a611b21607fc2db128 (patch) | |
tree | 4015dc16472747b1745333534458808ca0538539 /net | |
parent | 4d9b6c54725ceb1494674743d54f88fdb3dce7f0 (diff) |
awss3sink: Add properties to set content-Type and content-disposition.
for uploaded object default content-type is set to binary/octet-stream,
which is correct.
metadata cannot be used to set content-type and content-disposition as
setting metadata add a prefix x-amz-meta to key
e.g. setting metadate "content-type=video/mp4" actually set value as
x-amz-meta-content-type. So these has to be seaprate property.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1085>
Diffstat (limited to 'net')
-rw-r--r-- | net/aws/src/s3sink/imp.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/net/aws/src/s3sink/imp.rs b/net/aws/src/s3sink/imp.rs index 0f32aafe..1871740e 100644 --- a/net/aws/src/s3sink/imp.rs +++ b/net/aws/src/s3sink/imp.rs @@ -101,6 +101,7 @@ struct Settings { bucket: Option<String>, key: Option<String>, content_type: Option<String>, + content_disposition: Option<String>, buffer_size: u64, access_key: Option<String>, secret_access_key: Option<String>, @@ -153,6 +154,7 @@ impl Default for Settings { bucket: None, key: None, content_type: None, + content_disposition: None, access_key: None, secret_access_key: None, session_token: None, @@ -350,6 +352,7 @@ impl S3Sink { let bucket = Some(url.bucket.clone()); let key = Some(url.object.clone()); let content_type = settings.content_type.clone(); + let content_disposition = settings.content_disposition.clone(); let metadata = settings.to_metadata(self); client @@ -357,6 +360,7 @@ impl S3Sink { .set_bucket(bucket) .set_key(key) .set_content_type(content_type) + .set_content_disposition(content_disposition) .set_metadata(metadata) } @@ -753,6 +757,14 @@ impl ObjectImpl for S3Sink { .nick("S3 endpoint URI") .blurb("The S3 endpoint URI to use") .build(), + glib::ParamSpecString::builder("content-type") + .nick("content-type") + .blurb("Content-Type header to set for uploaded object") + .build(), + glib::ParamSpecString::builder("content-disposition") + .nick("content-disposition") + .blurb("Content-Disposition header to set for uploaded object") + .build(), ] }); @@ -856,6 +868,16 @@ impl ObjectImpl for S3Sink { let _ = self.set_uri(Some(&settings.to_uri())); } } + "content-type" => { + settings.content_type = value + .get::<Option<String>>() + .expect("type checked upstream"); + } + "content-disposition" => { + settings.content_disposition = value + .get::<Option<String>>() + .expect("type checked upstream"); + } _ => unimplemented!(), } } @@ -895,6 +917,8 @@ impl ObjectImpl for S3Sink { (settings.retry_attempts as i64 * request_timeout).to_value() } "endpoint-uri" => settings.endpoint_uri.to_value(), + "content-type" => settings.content_type.to_value(), + "content-disposition" => settings.content_disposition.to_value(), _ => unimplemented!(), } } |