[ 
https://issues.apache.org/jira/browse/JCLOUDS-1400?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16436879#comment-16436879
 ] 

ASF subversion and git services commented on JCLOUDS-1400:
----------------------------------------------------------

Commit fbaacf7b373d6bd020d7acdffde601e71d7929b8 in jclouds's branch 
refs/heads/2.1.x from [~gaul]
[ https://git-wip-us.apache.org/repos/asf?p=jclouds.git;h=fbaacf7 ]

JCLOUDS-1400: Honor Azure signed URL content type


> GCS's presigned url requires blank Content-Type
> -----------------------------------------------
>
>                 Key: JCLOUDS-1400
>                 URL: https://issues.apache.org/jira/browse/JCLOUDS-1400
>             Project: jclouds
>          Issue Type: Bug
>          Components: jclouds-blobstore
>    Affects Versions: 2.1.0
>            Reporter: Ivan Orlov
>            Assignee: Andrew Gaul
>            Priority: Major
>
> I am trying to signPutBlob for google cloud storage.
> 1)
> {code:java}
> BlobStoreContext context = ContextBuilder.newBuilder("google-cloud-storage")
>     .credentials(GOOGLE_ACCESS_KEY, GOOGLE_SECRET_KEY)
>     .buildView(BlobStoreContext.class);
> BlobStore blobStore = context.getBlobStore();
> Blob blob = blobStore
>     .blobBuilder("3.png")
>     .forSigning()
>     .contentLength(20493)
>     .contentType(MediaType.PNG)   // setting contentType
>     .build();
> HttpRequest httpRequest = context
>     .getSigner()
>     .signPutBlob("cs-29337eeb-27c1-4dbc-805c-f01ba1744eb1", blob, 3600);
> {code}
> 2)
> {code:java}
> PUT 
> http://storage.googleapis.com/cs-29337eeb-27c1-4dbc-805c-f01ba1744eb1/3.png?Expires=1523454042&GoogleAccessId=access-s3%40storage-app-199609.iam.gserviceaccount.com&Signature=Aoam8qw0NYIDGDKBW4PpJXPklchTndaFwk4syrw0/K4c50hrDZFKG/oARWn1nSEKqRZlBuh2BBQtRSRNNH7Ol6Qhybo%2BX1hst7PxkaUue2iQwR%2B/t8p4izl%2BTGEJ99x2KdYsZb3Q7CmJvWkPlJ27KUGdVyJf/tTDGYwtE2uekXFxMu9r355N5RsBWBftW8kKnOaZBFsjO/q25bYs%2BAa/gQ01HfoQdDSPCYZ5QZST5G1vXYLuRcxYs3Hb33N3s5hq07/Nnopoai7CtrPKR1iSm766fzMaqZaSihXAQzCge5F25esML0kUkKvK%2BQBdFESD433Y1%2B33vg%2BZ9xvVlV3UlA%3D%3D
>  HTTP/1.1
> Headers:
> Content-Type: image/png{code}
>  
> Response:
> {code:java}
> <?xml version='1.0' encoding='UTF-8'?>
> <Error>
> <Code>SignatureDoesNotMatch</Code>
> <Message>The request signature we calculated does not match the signature you 
> provided. Check your Google secret key and signing method.</Message>
> <StringToSign>PUT
> image/png
> 1523454042
> /cs-29337eeb-27c1-4dbc-805c-f01ba1744eb1/3.png</StringToSign>
> </Error>
> {code}
>  
> 3) With no passed content-type it becomes text/plain
> {code:java}
> <?xml version='1.0' encoding='UTF-8'?>
> <Error>
> <Code>SignatureDoesNotMatch</Code>
> <Message>The request signature we calculated does not match the signature you 
> provided. Check your Google secret key and signing method.</Message>
> <StringToSign>PUT
> text/plain
> 1523454042
> /cs-29337eeb-27c1-4dbc-805c-f01ba1744eb1/3.png</StringToSign>
> </Error>
> {code}
>  
>  
> 4) And with passed _Content-Type: ""_ it's okay.
>  
> 5) GoogleCloudStorageBlobRequestSigner.java
> {code:java}
> @Override
> public HttpRequest signPutBlob(String container, Blob blob, long 
> timeInSeconds) {
>     return sign("PUT", container, blob.getMetadata().getName(), 
> GetOptions.NONE, timestamp.get() + timeInSeconds, null);
> }
> private HttpRequest sign(String method, String container, String name, 
> GetOptions options, long expires, String contentType) {
>     checkNotNull(container, "container");
>     checkNotNull(name, "name");
>     ...
> }
> {code}
> Why is the last parameter "contentType" always null? We could read it from 
> the blob, from
> {code:java}
> blob.getMetadata().getContentMetadata().getContentType();{code}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to