about summary refs log tree commit diff
path: root/pkgs/tools/package-management/nix/aws-sdk-cpp-TransferManager-ContentEncoding.patch
blob: 59cc305a60bc5f1b13259afbb2d20f84393d8862 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
From 7d58e303159b2fb343af9a1ec4512238efa147c7 Mon Sep 17 00:00:00 2001
From: Eelco Dolstra <edolstra@gmail.com>
Date: Mon, 6 Aug 2018 17:15:04 +0200
Subject: [PATCH] TransferManager: Allow setting a content-encoding for S3 uploads

--- a/aws-cpp-sdk-transfer/include/aws/transfer/TransferHandle.h
+++ b/aws-cpp-sdk-transfer/include/aws/transfer/TransferHandle.h
@@ -297,6 +297,14 @@ namespace Aws
              * Content type of the object being transferred
              */
             inline void SetContentType(const Aws::String& value) { std::lock_guard<std::mutex> locker(m_getterSetterLock); m_contentType = value; }
+            /**
+             * Content encoding of the object being transferred
+             */
+            inline const Aws::String GetContentEncoding() const { std::lock_guard<std::mutex> locker(m_getterSetterLock); return m_contentEncoding; }
+            /**
+             * Content type of the object being transferred
+             */
+            inline void SetContentEncoding(const Aws::String& value) { std::lock_guard<std::mutex> locker(m_getterSetterLock); m_contentEncoding = value; }
             /**
              * In case of an upload, this is the metadata that was placed on the object when it was uploaded.
              * In the case of a download, this is the object metadata from the GetObject operation.
@@ -383,6 +391,7 @@ namespace Aws
             Aws::String m_key;
             Aws::String m_fileName;
             Aws::String m_contentType;
+            Aws::String m_contentEncoding;
             Aws::String m_versionId;
             Aws::Map<Aws::String, Aws::String> m_metadata;
             TransferStatus m_status;
--- a/aws-cpp-sdk-transfer/include/aws/transfer/TransferManager.h
+++ b/aws-cpp-sdk-transfer/include/aws/transfer/TransferManager.h
@@ -154,7 +154,8 @@ namespace Aws
                                                        const Aws::String& keyName,
                                                        const Aws::String& contentType, 
                                                        const Aws::Map<Aws::String, Aws::String>& metadata,
-                                                       const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr);
+                                                       const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr,
+                                                       const Aws::String& contentEncoding = "");
 
             /**
              * Downloads the contents of bucketName/keyName in S3 to the file specified by writeToFile. This will perform a GetObject operation.
@@ -246,7 +247,8 @@ namespace Aws
                                                                    const Aws::Map<Aws::String,
                                                                    Aws::String>& metadata,
                                                                    const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
-                                                                   const Aws::String& fileName = "");
+                                                                   const Aws::String& fileName = "",
+                                                                   const Aws::String& contentEncoding = "");
 
             /**
              * Submits the actual task to task schecduler
@@ -262,7 +264,8 @@ namespace Aws
                                                          const Aws::String& keyName,
                                                          const Aws::String& contentType,
                                                          const Aws::Map<Aws::String, Aws::String>& metadata,
-                                                         const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context);
+                                                         const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
+                                                         const Aws::String& contentEncoding);
 
             /**
              * Uploads the contents of file, to bucketName/keyName in S3. contentType and metadata will be added to the object. If the object is larger than the configured bufferSize,
--- a/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp
+++ b/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp
@@ -87,9 +87,10 @@ namespace Aws
                                                                     const Aws::String& bucketName,
                                                                     const Aws::String& keyName, const Aws::String& contentType,
                                                                     const Aws::Map<Aws::String, Aws::String>& metadata,
-                                                                    const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context)
+                                                                    const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
+                                                                    const Aws::String& contentEncoding)
         {
-            return this->DoUploadFile(fileStream, bucketName, keyName, contentType, metadata, context);
+            return this->DoUploadFile(fileStream, bucketName, keyName, contentType, metadata, context, contentEncoding);
         }
 
         std::shared_ptr<TransferHandle> TransferManager::DownloadFile(const Aws::String& bucketName,
@@ -286,6 +287,9 @@ namespace Aws
                 createMultipartRequest.WithKey(handle->GetKey());
                 createMultipartRequest.WithMetadata(handle->GetMetadata());
 
+                if (handle->GetContentEncoding() != "")
+                    createMultipartRequest.WithContentEncoding(handle->GetContentEncoding());
+
                 auto createMultipartResponse = m_transferConfig.s3Client->CreateMultipartUpload(createMultipartRequest);
                 if (createMultipartResponse.IsSuccess())
                 {
@@ -441,6 +445,9 @@ namespace Aws
 
             putObjectRequest.SetContentType(handle->GetContentType());
 
+            if (handle->GetContentEncoding() != "")
+                putObjectRequest.SetContentEncoding(handle->GetContentEncoding());
+
             auto buffer = m_bufferManager.Acquire();
 
             auto lengthToWrite = (std::min)(m_transferConfig.bufferSize, handle->GetBytesTotalSize());
@@ -1140,12 +1147,15 @@ namespace Aws
                                                                                 const Aws::String& contentType,
                                                                                 const Aws::Map<Aws::String, Aws::String>& metadata,
                                                                                 const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
-                                                                                const Aws::String& fileName)
+                                                                                const Aws::String& fileName,
+                                                                                const Aws::String& contentEncoding)
         {
             auto handle = Aws::MakeShared<TransferHandle>(CLASS_TAG, bucketName, keyName, 0, fileName);
             handle->SetContentType(contentType);
             handle->SetMetadata(metadata);
             handle->SetContext(context);
+            if (contentEncoding != "")
+                handle->SetContentEncoding(contentEncoding);
 
             if (!fileStream->good())
             {
@@ -1213,9 +1223,10 @@ namespace Aws
                                                                       const Aws::String& keyName,
                                                                       const Aws::String& contentType,
                                                                       const Aws::Map<Aws::String, Aws::String>& metadata,
-                                                                      const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context)
+                                                                      const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
+                                                                      const Aws::String& contentEncoding)
         {
-            auto handle = CreateUploadFileHandle(fileStream.get(), bucketName, keyName, contentType, metadata, context);
+            auto handle = CreateUploadFileHandle(fileStream.get(), bucketName, keyName, contentType, metadata, context, "", contentEncoding);
             return SubmitUpload(handle, fileStream);
         }