Alexander Chernavin created JCLOUDS-1547:
--------------------------------------------

             Summary: Google InputStream blob upload ignores MD5
                 Key: JCLOUDS-1547
                 URL: https://issues.apache.org/jira/browse/JCLOUDS-1547
             Project: jclouds
          Issue Type: Bug
          Components: jclouds-blobstore
    Affects Versions: 2.2.1, 2.2.0
            Reporter: Alexander Chernavin


According to [GCS blob upload 
documentation|[https://cloud.google.com/storage/docs/xml-api/put-object-upload]],
 when Content-MD5 header is provided, Google uses it to verify data integrity 
of an uploaded blob. This feature is crucial for us. We have a file upload 
functionality that takes an input stream and uploads it to a cloud via JClouds. 
We want to be sure that file integrity is enforced.

 

JClouds blob builder allows to specify content MD5, but this value is ignored 
with InputStream payload, it's simply is not propagated into Content-MD5 header.

Here is the code snippet to reproduce the issue:
{code:java}
BlobStoreContext context = ContextBuilder.newBuilder("google-cloud-storage")
    .credentials(clientEmail, privateKey)
    .buildView(BlobStoreContext.class);

// generate MD5 hash for some bogus content
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update("bogus".getBytes());

InputStream inputStream = new ByteArrayInputStream("hi".getBytes());

BlobStore blobStore = context.getBlobStore();
blobStore.putBlob(myContainer,
    blobStore.blobBuilder("test.txt")
        .payload(inputStream)
        .contentLength(2)
        .contentType("text/plain")
        .contentMD5(HashCode.fromBytes(md5.digest()))
        .build()); {code}
putBlob should have failed, because payload is "hi", but MD5 is calculated for 
"bogus" string.

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to