diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java index 23251edc5..11d4b9876 100644 --- a/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java +++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java @@ -956,6 +956,10 @@ public String open(String signedURL) { HttpHeaders requestHeaders = httpRequest.getHeaders(); requestHeaders.set("X-Upload-Content-Type", ""); requestHeaders.set("x-goog-resumable", "start"); + // Using the x-goog-api-client header causes a signature mismatch with signed URLs generated + // outside the Java storage client + requestHeaders.remove("x-goog-api-client"); + HttpResponse response = httpRequest.execute(); if (response.getStatusCode() != 201) { GoogleJsonError error = new GoogleJsonError(); diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java index 305580204..7ed1239b2 100644 --- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java +++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java @@ -3421,15 +3421,23 @@ public void testUploadUsingSignedURL() throws Exception { String blobName = "test-signed-url-upload"; BlobInfo blob = BlobInfo.newBuilder(BUCKET, blobName).build(); assertNotNull(storage.create(blob)); + Map extensionHeaders = new HashMap<>(); + extensionHeaders.put("x-goog-resumable", "start"); for (Storage.SignUrlOption urlStyle : Arrays.asList( Storage.SignUrlOption.withPathStyle(), Storage.SignUrlOption.withVirtualHostedStyle())) { URL signUrl = storage.signUrl( - blob, 1, TimeUnit.HOURS, Storage.SignUrlOption.httpMethod(HttpMethod.POST), urlStyle); + blob, + 1, + TimeUnit.HOURS, + Storage.SignUrlOption.httpMethod(HttpMethod.POST), + Storage.SignUrlOption.withExtHeaders(extensionHeaders), + urlStyle); byte[] bytesArrayToUpload = BLOB_STRING_CONTENT.getBytes(); - try (WriteChannel writer = storage.writer(signUrl)) { + Storage unauthenticatedStorage = StorageOptions.getUnauthenticatedInstance().getService(); + try (WriteChannel writer = unauthenticatedStorage.writer(signUrl)) { writer.write(ByteBuffer.wrap(bytesArrayToUpload, 0, bytesArrayToUpload.length)); }