|
15 | 15 | */ |
16 | 16 | package com.google.cloud.storage; |
17 | 17 |
|
18 | | -import static com.google.cloud.storage.Utils.ifNonNull; |
19 | | - |
20 | 18 | import com.fasterxml.jackson.dataformat.xml.XmlMapper; |
21 | 19 | import com.google.api.client.http.ByteArrayContent; |
22 | 20 | import com.google.api.client.http.GenericUrl; |
|
36 | 34 | import com.google.cloud.storage.multipartupload.model.CompleteMultipartUploadResponse; |
37 | 35 | import com.google.cloud.storage.multipartupload.model.CreateMultipartUploadRequest; |
38 | 36 | import com.google.cloud.storage.multipartupload.model.CreateMultipartUploadResponse; |
| 37 | +import com.google.cloud.storage.multipartupload.model.ListMultipartUploadsRequest; |
| 38 | +import com.google.cloud.storage.multipartupload.model.ListMultipartUploadsResponse; |
39 | 39 | import com.google.cloud.storage.multipartupload.model.ListPartsRequest; |
40 | 40 | import com.google.cloud.storage.multipartupload.model.ListPartsResponse; |
41 | 41 | import com.google.cloud.storage.multipartupload.model.UploadPartRequest; |
@@ -118,6 +118,42 @@ ListPartsResponse sendListPartsRequest(ListPartsRequest request) throws IOExcept |
118 | 118 | return httpRequest.execute().parseAs(ListPartsResponse.class); |
119 | 119 | } |
120 | 120 |
|
| 121 | + ListMultipartUploadsResponse sendListMultipartUploadsRequest(ListMultipartUploadsRequest request) |
| 122 | + throws IOException { |
| 123 | + |
| 124 | + ImmutableMap.Builder<String, Object> params = |
| 125 | + ImmutableMap.<String, Object>builder().put("bucket", request.bucket()); |
| 126 | + if (request.delimiter() != null) { |
| 127 | + params.put("delimiter", request.delimiter()); |
| 128 | + } |
| 129 | + if (request.encodingType() != null) { |
| 130 | + params.put("encoding-type", request.encodingType()); |
| 131 | + } |
| 132 | + if (request.keyMarker() != null) { |
| 133 | + params.put("key-marker", request.keyMarker()); |
| 134 | + } |
| 135 | + if (request.maxUploads() != null) { |
| 136 | + params.put("max-uploads", request.maxUploads()); |
| 137 | + } |
| 138 | + if (request.prefix() != null) { |
| 139 | + params.put("prefix", request.prefix()); |
| 140 | + } |
| 141 | + if (request.uploadIdMarker() != null) { |
| 142 | + params.put("upload-id-marker", request.uploadIdMarker()); |
| 143 | + } |
| 144 | + String listUri = |
| 145 | + UriTemplate.expand( |
| 146 | + uri.toString() |
| 147 | + + "{bucket}?uploads{&delimiter,encoding-type,key-marker,max-uploads,prefix,upload-id-marker}", |
| 148 | + params.build(), |
| 149 | + false); |
| 150 | + HttpRequest httpRequest = requestFactory.buildGetRequest(new GenericUrl(listUri)); |
| 151 | + httpRequest.getHeaders().putAll(headerProvider.getHeaders()); |
| 152 | + httpRequest.setParser(objectParser); |
| 153 | + httpRequest.setThrowExceptionOnExecuteError(true); |
| 154 | + return httpRequest.execute().parseAs(ListMultipartUploadsResponse.class); |
| 155 | + } |
| 156 | + |
121 | 157 | AbortMultipartUploadResponse sendAbortMultipartUploadRequest(AbortMultipartUploadRequest request) |
122 | 158 | throws IOException { |
123 | 159 |
|
@@ -149,6 +185,9 @@ CompleteMultipartUploadResponse sendCompleteMultipartUploadRequest( |
149 | 185 | requestFactory.buildPostRequest( |
150 | 186 | new GenericUrl(completeUri), new ByteArrayContent("application/xml", bytes)); |
151 | 187 | httpRequest.getHeaders().putAll(headerProvider.getHeaders()); |
| 188 | + if (request.userProject() != null) { |
| 189 | + httpRequest.getHeaders().put("x-goog-user-project", request.userProject()); |
| 190 | + } |
152 | 191 | @Nullable Crc32cLengthKnown crc32cValue = Hasher.defaultHasher().hash(ByteBuffer.wrap(bytes)); |
153 | 192 | addChecksumHeader(crc32cValue, httpRequest.getHeaders()); |
154 | 193 | httpRequest.setParser(objectParser); |
@@ -198,7 +237,6 @@ static MultipartUploadHttpRequestManager createFrom(HttpStorageOptions options) |
198 | 237 | options.getLibraryVersion(), |
199 | 238 | formatName(StandardSystemProperty.OS_NAME.value()), |
200 | 239 | formatSemver(StandardSystemProperty.OS_VERSION.value()))); |
201 | | - ifNonNull(options.getProjectId(), pid -> stableHeaders.put("x-goog-user-project", pid)); |
202 | 240 | return new MultipartUploadHttpRequestManager( |
203 | 241 | storage.getRequestFactory(), |
204 | 242 | new XmlObjectParser(new XmlMapper()), |
@@ -282,7 +320,7 @@ private static String urlEncode(String value) { |
282 | 320 | */ |
283 | 321 | private static String formatName(String name) { |
284 | 322 | // Only lowercase letters, digits, and "-" are allowed |
285 | | - return name.toLowerCase().replaceAll("[^\\w\\d\\-]", "-"); |
| 323 | + return name.toLowerCase().replaceAll("[^\\w-]", "-"); |
286 | 324 | } |
287 | 325 |
|
288 | 326 | private static String formatSemver(String version) { |
|
0 commit comments