From 4d29dd4e282c682c11dd6bd0a0787f77eee9bb6b Mon Sep 17 00:00:00 2001 From: Christopher Noyes Date: Wed, 18 Jul 2012 18:33:31 -0400 Subject: [PATCH] allow adding encoding to content type in s3 --- S3/Config.py | 1 + S3/S3.py | 13 +++++++++++++ s3cmd | 1 + 3 files changed, 15 insertions(+) diff --git a/S3/Config.py b/S3/Config.py index 08132b53b..f5c72895c 100644 --- a/S3/Config.py +++ b/S3/Config.py @@ -40,6 +40,7 @@ class Config(object): proxy_port = 3128 encrypt = False dry_run = False + add_encoding_ext = [] preserve_attrs = True preserve_attrs_list = [ 'uname', # Verbose owner Name (e.g. 'root') diff --git a/S3/S3.py b/S3/S3.py index 67304523f..f78a29145 100644 --- a/S3/S3.py +++ b/S3/S3.py @@ -339,6 +339,14 @@ def website_delete(self, uri, bucket_location = None): return response + def add_encoding(self, filename): + parts = filename.rsplit('.',2) + ext = parts[1] + if ext in self.config.add_encoding_ext: + return True + else: + return False + def object_put(self, filename, uri, extra_headers = None, extra_label = ""): # TODO TODO # Make it consistent with stream-oriented object_get() @@ -363,6 +371,11 @@ def object_put(self, filename, uri, extra_headers = None, extra_label = ""): content_type = mime_magic(filename) if not content_type: content_type = self.config.default_mime_type + + ## add charset to content type + if self.add_encoding(filename): + content_type = content_type + ";charset=" + self.config.encoding.upper() + debug("Content-Type set to '%s'" % content_type) headers["content-type"] = content_type diff --git a/s3cmd b/s3cmd index 4f7de6ca3..0a981f1b6 100755 --- a/s3cmd +++ b/s3cmd @@ -1524,6 +1524,7 @@ def main(): optparser.add_option( "--add-header", dest="add_header", action="append", metavar="NAME:VALUE", help="Add a given HTTP header to the upload request. Can be used multiple times. For instance set 'Expires' or 'Cache-Control' headers (or both) using this options if you like.") optparser.add_option( "--encoding", dest="encoding", metavar="ENCODING", help="Override autodetected terminal and filesystem encoding (character set). Autodetected: %s" % preferred_encoding) + optparser.add_option( "--add-encoding-ext", dest="add_encoding_ext", action="append", metavar="EXTENSION", help="Add encoding to this ext when uploading to S3, may be used multiple times") optparser.add_option( "--verbatim", dest="urlencoding_mode", action="store_const", const="verbatim", help="Use the S3 name as given on the command line. No pre-processing, encoding, etc. Use with caution!") optparser.add_option( "--disable-multipart", dest="enable_multipart", action="store_false", help="Disable multipart upload on files bigger than --multipart-chunk-size-mb")