diff --git a/docs/plugins/gst_plugins_cache.json b/docs/plugins/gst_plugins_cache.json index 35ba371a..e5c62498 100644 --- a/docs/plugins/gst_plugins_cache.json +++ b/docs/plugins/gst_plugins_cache.json @@ -257,6 +257,30 @@ "type": "gint64", "writable": true }, + "content-disposition": { + "blurb": "Content-Disposition header to set for uploaded object", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "NULL", + "mutable": "null", + "readable": true, + "type": "gchararray", + "writable": true + }, + "content-type": { + "blurb": "Content-Type header to set for uploaded object", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "NULL", + "mutable": "null", + "readable": true, + "type": "gchararray", + "writable": true + }, "endpoint-uri": { "blurb": "The S3 endpoint URI to use", "conditionally-available": false, diff --git a/net/aws/src/s3sink/imp.rs b/net/aws/src/s3sink/imp.rs index 9a25e63b..e6aa633d 100644 --- a/net/aws/src/s3sink/imp.rs +++ b/net/aws/src/s3sink/imp.rs @@ -101,6 +101,7 @@ struct Settings { bucket: Option, key: Option, content_type: Option, + content_disposition: Option, buffer_size: u64, access_key: Option, secret_access_key: Option, @@ -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::>() + .expect("type checked upstream"); + } + "content-disposition" => { + settings.content_disposition = value + .get::>() + .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!(), } }