下面列出了com.amazonaws.services.s3.model.ObjectMetadata#setLastModified ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static ObjectMetadata simpleUploadFile(S3Client client, byte[] bytes, String bucket, String key) throws Exception
{
byte[] md5 = md5(bytes, bytes.length);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(bytes.length);
metadata.setLastModified(new Date());
metadata.setContentMD5(S3Utils.toBase64(md5));
PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, key, new ByteArrayInputStream(bytes), metadata);
PutObjectResult putObjectResult = client.putObject(putObjectRequest);
if ( !putObjectResult.getETag().equals(S3Utils.toHex(md5)) )
{
throw new Exception("Unable to match MD5 for config");
}
return metadata;
}
@Test
void lastModified_withExistingResource_returnsLastModifiedDateOfResource()
throws Exception {
// Arrange
AmazonS3 amazonS3 = mock(AmazonS3.class);
ObjectMetadata objectMetadata = new ObjectMetadata();
Date lastModified = new Date();
objectMetadata.setLastModified(lastModified);
when(amazonS3.getObjectMetadata(any(GetObjectMetadataRequest.class)))
.thenReturn(objectMetadata);
// Act
SimpleStorageResource simpleStorageResource = new SimpleStorageResource(amazonS3,
"bucket", "object", new SyncTaskExecutor());
// Assert
assertThat(simpleStorageResource.lastModified())
.isEqualTo(lastModified.getTime());
}
protected ObjectMetadata buildMetadata(File file) throws IOException {
final ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(Mimetypes.getInstance().getMimetype(file.getName()));
metadata.setContentLength(file.length());
metadata.setLastModified(new Date(file.lastModified()));
if (storageClass != null && !storageClass.isEmpty()) {
metadata.setHeader("x-amz-storage-class", storageClass);
}
if (useServerSideEncryption) {
metadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
}
for (Map.Entry<String, String> entry : userMetadata.entrySet()) {
final String key = entry.getKey().toLowerCase();
switch (key) {
case "cache-control":
metadata.setCacheControl(entry.getValue());
break;
case "expires":
try {
final Date expires = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z").parse(entry.getValue());
metadata.setHttpExpiresDate(expires);
} catch (ParseException e) {
metadata.addUserMetadata(entry.getKey(), entry.getValue());
}
break;
case "content-encoding":
metadata.setContentEncoding(entry.getValue());
break;
case "content-type":
metadata.setContentType(entry.getValue());
default:
metadata.addUserMetadata(entry.getKey(), entry.getValue());
break;
}
}
return metadata;
}
@Test
public void matchNonGlob() {
S3FileSystem s3FileSystem = buildMockedS3FileSystem(s3Options());
S3ResourceId path = S3ResourceId.fromUri("s3://testbucket/testdirectory/filethatexists");
long lastModifiedMillis = 1540000000000L;
ObjectMetadata s3ObjectMetadata = new ObjectMetadata();
s3ObjectMetadata.setContentLength(100);
s3ObjectMetadata.setContentEncoding("read-seek-efficient");
s3ObjectMetadata.setLastModified(new Date(lastModifiedMillis));
when(s3FileSystem
.getAmazonS3Client()
.getObjectMetadata(
argThat(
new GetObjectMetadataRequestMatcher(
new GetObjectMetadataRequest(path.getBucket(), path.getKey())))))
.thenReturn(s3ObjectMetadata);
MatchResult result = s3FileSystem.matchNonGlobPath(path);
assertThat(
result,
MatchResultMatcher.create(
ImmutableList.of(
MatchResult.Metadata.builder()
.setSizeBytes(100)
.setLastModifiedMillis(lastModifiedMillis)
.setResourceId(path)
.setIsReadSeekEfficient(true)
.build())));
}
@Test
public void matchNonGlobNotReadSeekEfficient() {
S3FileSystem s3FileSystem = buildMockedS3FileSystem(s3Options());
S3ResourceId path = S3ResourceId.fromUri("s3://testbucket/testdirectory/filethatexists");
long lastModifiedMillis = 1540000000000L;
ObjectMetadata s3ObjectMetadata = new ObjectMetadata();
s3ObjectMetadata.setContentLength(100);
s3ObjectMetadata.setLastModified(new Date(lastModifiedMillis));
s3ObjectMetadata.setContentEncoding("gzip");
when(s3FileSystem
.getAmazonS3Client()
.getObjectMetadata(
argThat(
new GetObjectMetadataRequestMatcher(
new GetObjectMetadataRequest(path.getBucket(), path.getKey())))))
.thenReturn(s3ObjectMetadata);
MatchResult result = s3FileSystem.matchNonGlobPath(path);
assertThat(
result,
MatchResultMatcher.create(
ImmutableList.of(
MatchResult.Metadata.builder()
.setSizeBytes(100)
.setLastModifiedMillis(lastModifiedMillis)
.setResourceId(path)
.setIsReadSeekEfficient(false)
.build())));
}
@Test
public void matchNonGlobNullContentEncoding() {
S3FileSystem s3FileSystem = buildMockedS3FileSystem(s3Options());
S3ResourceId path = S3ResourceId.fromUri("s3://testbucket/testdirectory/filethatexists");
long lastModifiedMillis = 1540000000000L;
ObjectMetadata s3ObjectMetadata = new ObjectMetadata();
s3ObjectMetadata.setContentLength(100);
s3ObjectMetadata.setLastModified(new Date(lastModifiedMillis));
s3ObjectMetadata.setContentEncoding(null);
when(s3FileSystem
.getAmazonS3Client()
.getObjectMetadata(
argThat(
new GetObjectMetadataRequestMatcher(
new GetObjectMetadataRequest(path.getBucket(), path.getKey())))))
.thenReturn(s3ObjectMetadata);
MatchResult result = s3FileSystem.matchNonGlobPath(path);
assertThat(
result,
MatchResultMatcher.create(
ImmutableList.of(
MatchResult.Metadata.builder()
.setSizeBytes(100)
.setLastModifiedMillis(lastModifiedMillis)
.setResourceId(path)
.setIsReadSeekEfficient(true)
.build())));
}
@Test
public void matchVariousInvokeThreadPool() throws IOException {
S3FileSystem s3FileSystem = buildMockedS3FileSystem(s3Options());
AmazonS3Exception notFoundException = new AmazonS3Exception("mock exception");
notFoundException.setStatusCode(404);
S3ResourceId pathNotExist =
S3ResourceId.fromUri("s3://testbucket/testdirectory/nonexistentfile");
when(s3FileSystem
.getAmazonS3Client()
.getObjectMetadata(
argThat(
new GetObjectMetadataRequestMatcher(
new GetObjectMetadataRequest(
pathNotExist.getBucket(), pathNotExist.getKey())))))
.thenThrow(notFoundException);
AmazonS3Exception forbiddenException = new AmazonS3Exception("mock exception");
forbiddenException.setStatusCode(403);
S3ResourceId pathForbidden =
S3ResourceId.fromUri("s3://testbucket/testdirectory/forbiddenfile");
when(s3FileSystem
.getAmazonS3Client()
.getObjectMetadata(
argThat(
new GetObjectMetadataRequestMatcher(
new GetObjectMetadataRequest(
pathForbidden.getBucket(), pathForbidden.getKey())))))
.thenThrow(forbiddenException);
S3ResourceId pathExist = S3ResourceId.fromUri("s3://testbucket/testdirectory/filethatexists");
ObjectMetadata s3ObjectMetadata = new ObjectMetadata();
s3ObjectMetadata.setContentLength(100);
s3ObjectMetadata.setLastModified(new Date(1540000000000L));
s3ObjectMetadata.setContentEncoding("not-gzip");
when(s3FileSystem
.getAmazonS3Client()
.getObjectMetadata(
argThat(
new GetObjectMetadataRequestMatcher(
new GetObjectMetadataRequest(pathExist.getBucket(), pathExist.getKey())))))
.thenReturn(s3ObjectMetadata);
S3ResourceId pathGlob = S3ResourceId.fromUri("s3://testbucket/path/part*");
S3ObjectSummary foundListObject = new S3ObjectSummary();
foundListObject.setBucketName(pathGlob.getBucket());
foundListObject.setKey("path/part-0");
foundListObject.setSize(200);
foundListObject.setLastModified(new Date(1541000000000L));
ListObjectsV2Result listObjectsResult = new ListObjectsV2Result();
listObjectsResult.setNextContinuationToken(null);
listObjectsResult.getObjectSummaries().add(foundListObject);
when(s3FileSystem.getAmazonS3Client().listObjectsV2(notNull(ListObjectsV2Request.class)))
.thenReturn(listObjectsResult);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentEncoding("");
when(s3FileSystem
.getAmazonS3Client()
.getObjectMetadata(
argThat(
new GetObjectMetadataRequestMatcher(
new GetObjectMetadataRequest(pathGlob.getBucket(), "path/part-0")))))
.thenReturn(metadata);
assertThat(
s3FileSystem.match(
ImmutableList.of(
pathNotExist.toString(),
pathForbidden.toString(),
pathExist.toString(),
pathGlob.toString())),
contains(
MatchResultMatcher.create(MatchResult.Status.NOT_FOUND, new FileNotFoundException()),
MatchResultMatcher.create(
MatchResult.Status.ERROR, new IOException(forbiddenException)),
MatchResultMatcher.create(100, 1540000000000L, pathExist, true),
MatchResultMatcher.create(
200,
1541000000000L,
S3ResourceId.fromComponents(pathGlob.getBucket(), foundListObject.getKey()),
true)));
}