private boolean skipClientSideValidationPerResponse(ObjectMetadata metadata) { if (metadata == null) { return true; } // If Etag is not provided or was computed from a multipart upload then skip the check, the // etag won't be the MD5 of the original content if (metadata.getETag() == null || isMultipartUploadETag(metadata.getETag())) { return true; } return metadataInvolvesSse(metadata); }
public static boolean isDirectoryPlaceholder(String key, ObjectMetadata objectMetadata) { // Recognize "standard" directory place-holder indications used by // Amazon's AWS Console and Panic's Transmit. if (key.endsWith("/") && objectMetadata.getContentLength() == 0) { return true; } // Recognize s3sync.rb directory placeholders by MD5/ETag value. if ("d66759af42f282e1ba19144df2d405d0".equals(objectMetadata.getETag())) { return true; } // Recognize place-holder objects created by the Google Storage console // or S3 Organizer Firefox extension. if (key.endsWith("_$folder$") && objectMetadata.getContentLength() == 0) { return true; } // We don't use JetS3t APIs anymore, but the below check is still needed for backward compatibility. // Recognize legacy JetS3t directory place-holder objects, only gives // accurate results if an object's metadata is populated. if (objectMetadata.getContentLength() == 0 && MIMETYPE_JETS3T_DIRECTORY.equals(objectMetadata.getContentType())) { return true; } return false; }
@Override @Nullable protected ObjectStatus getObjectStatus(String key) throws IOException { try { ObjectMetadata meta = mClient.getObjectMetadata(mBucketName, key); return new ObjectStatus(key, meta.getETag(), meta.getContentLength(), meta.getLastModified().getTime()); } catch (AmazonServiceException e) { if (e.getStatusCode() == 404) { // file not found, possible for exists calls return null; } throw new IOException(e); } catch (AmazonClientException e) { throw new IOException(e); } }
if (!skipMd5CheckStrategy.skipClientSideValidationPerGetResponse(metadata)) { clientSideHash = Md5Utils.computeMD5Hash(new FileInputStream(dstfile)); serverSideHash = BinaryUtils.fromHex(metadata.getETag());
@Override public InputStream openStream() throws IOException { try { final long start; final long end = objectMetadata.getContentLength() - 1; if (offset > 0 && offset < objectMetadata.getContentLength()) { start = offset; } else if (offset < 0 && (-1 * offset) < objectMetadata.getContentLength()) { start = objectMetadata.getContentLength() + offset; } else { start = 0; } final GetObjectRequest request = new GetObjectRequest(config.getS3Bucket(), taskKey) .withMatchingETagConstraint(objectMetadata.getETag()) .withRange(start, end); return service.getObject(request).getObjectContent(); } catch (AmazonServiceException e) { throw new IOException(e); } } }
private static PutObjectResult createPutObjectResult(ObjectMetadata metadata) { final PutObjectResult result = new PutObjectResult(); result.setVersionId(metadata.getVersionId()); result.setSSEAlgorithm(metadata.getSSEAlgorithm()); result.setSSECustomerAlgorithm(metadata.getSSECustomerAlgorithm()); result.setSSECustomerKeyMd5(metadata.getSSECustomerKeyMd5()); result.setExpirationTime(metadata.getExpirationTime()); result.setExpirationTimeRuleId(metadata.getExpirationTimeRuleId()); result.setETag(metadata.getETag()); result.setMetadata(metadata); result.setRequesterCharged(metadata.isRequesterCharged()); return result; }
request.setContent(inputStream); ObjectMetadata metadata = invoke(request, new S3MetadataResponseHandler(), bucketName, key); final String etag = metadata.getETag();
final String etag = returnedMetadata.getETag(); if (contentMd5 != null && !skipMd5CheckStrategy.skipClientSideValidationPerPutResponse(returnedMetadata)) { byte[] clientSideHash = BinaryUtils.fromBase64(contentMd5);
byte[] serverSideHash = BinaryUtils.fromHex(s3Object.getObjectMetadata().getETag()); try {
@Override @NotNull public String etag() { return this.object.getObjectMetadata().getETag(); }
&& !ServiceUtils.skipMd5CheckPerResponse(metadata)) { final byte[] clientSideHash = md5DigestStream.getMd5Digest(); final byte[] serverSideHash = BinaryUtils.fromHex(metadata.getETag()); result.setETag(metadata.getETag()); result.setPartNumber(partNumber); result.setSSEAlgorithm(metadata.getSSEAlgorithm());
final byte[] serverSideHash = BinaryUtils.fromHex(returnedMetadata.getETag()); result.setExpirationTime(returnedMetadata.getExpirationTime()); result.setExpirationTimeRuleId(returnedMetadata.getExpirationTimeRuleId()); result.setETag(returnedMetadata.getETag()); result.setMetadata(returnedMetadata); result.setRequesterCharged(returnedMetadata.isRequesterCharged());
&& !ServiceUtils.skipMd5CheckPerResponse(s3Object.getObjectMetadata())) { byte[] serverSideHash = null; final String etag = s3Object.getObjectMetadata().getETag(); if (etag != null && ServiceUtils.isMultipartUploadETag(etag) == false) { serverSideHash = BinaryUtils.fromHex(s3Object.getObjectMetadata().getETag()); try {
public FingerprintRecord invoke(File file, VirtualChannel channel) throws IOException, InterruptedException { GetObjectRequest req = new GetObjectRequest(dest.bucketName, dest.objectName); ObjectMetadata md = getClient().getObject(req, file); return new FingerprintRecord(true, dest.bucketName, file.getName(), md.getETag()); }
assertEquals(1136116800000L, om.getLastModified().getTime()); assertEquals(om.getContentLength(), 5); assertEquals(om.getETag(), "Etag"); assertEquals(1356048000000L, om.getExpirationTime().getTime()); assertEquals(1136116800000L, om.getHttpExpiresDate().getTime());
assertEquals(1136116800000L, om.getLastModified().getTime()); assertEquals(om.getContentLength(), 5); assertEquals(om.getETag(), "Etag"); assertEquals(1356048000000L, om.getExpirationTime().getTime()); assertEquals(1136116800000L, om.getHttpExpiresDate().getTime());
assertEquals("md5", from.getContentMD5()); assertEquals("contentType", from.getContentType()); assertEquals("etag", from.getETag()); assertEquals("md5", to.getContentMD5()); assertEquals("contentType", to.getContentType()); assertEquals("etag", to.getETag()); assertEquals(expTime, to.getExpirationTime()); assertEquals("expirationTimeRuleId", to.getExpirationTimeRuleId());
@Test public void cloneEmpty() { ObjectMetadata from = new ObjectMetadata(); for (int i = 0; i < 2; i++) { assertNull(from.getCacheControl()); assertNull(from.getContentDisposition()); assertNull(from.getContentEncoding()); assertTrue(0 == from.getContentLength()); assertNull(from.getContentMD5()); assertNull(from.getContentType()); assertNull(from.getETag()); assertNull(from.getExpirationTime()); assertNull(from.getExpirationTimeRuleId()); assertNull(from.getHttpExpiresDate()); assertTrue(0 == from.getInstanceLength()); assertNull(from.getLastModified()); assertNull(from.getOngoingRestore()); assertTrue(from.getRawMetadata().size() == 0); assertNull(from.getRestoreExpirationTime()); assertNull(from.getSSEAlgorithm()); assertNull(from.getSSECustomerAlgorithm()); assertNull(from.getSSECustomerKeyMd5()); assertTrue(0 == from.getUserMetadata().size()); assertNull(from.getVersionId()); assertNull(from.getStorageClass()); // Clone an empty instance from = from.clone(); } }