You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jclouds.apache.org by "Andrew Gaul (Jira)" <ji...@apache.org> on 2020/05/31 08:51:00 UTC
[jira] [Resolved] (JCLOUDS-1547) Google InputStream blob upload
ignores MD5
[ https://issues.apache.org/jira/browse/JCLOUDS-1547?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrew Gaul resolved JCLOUDS-1547.
----------------------------------
Fix Version/s: 2.3.0
Resolution: Fixed
> 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.0, 2.2.1
> Reporter: Alexander Chernavin
> Assignee: Andrew Gaul
> Priority: Major
> Labels: google-cloud-storage, md5
> Fix For: 2.3.0
>
>
> 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)