From d5598c3dd00abb55499090b6ad0c9e52e5ff381c Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Tue, 11 May 2021 19:13:54 +0200 Subject: [PATCH] Save stats request if lastmodify is set in header of write result in S3 --- .../org/cryptomator/data/cloud/s3/S3Impl.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java b/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java index 054a69d7..bb9003b1 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java +++ b/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java @@ -243,14 +243,22 @@ class S3Impl { }) { try { PutObjectArgs putObjectArgs = PutObjectArgs.builder().bucket(cloud.s3Bucket()).object(file.getKey()).stream(out.open(context), data.size(context).get(), -1).build(); - client().putObject(putObjectArgs); - StatObjectResponse statObjectResponse = client().statObject(StatObjectArgs // - .builder() // - .bucket(cloud.s3Bucket()) // - .object(file.getKey()) // - .build()); + ObjectWriteResponse objectWriteResponse = client().putObject(putObjectArgs); + + Date lastModified = objectWriteResponse.headers().getDate("Last-Modified"); + + if(lastModified == null) { + StatObjectResponse statObjectResponse = client().statObject(StatObjectArgs // + .builder() // + .bucket(cloud.s3Bucket()) // + .object(file.getKey()) // + .build()); + + lastModified = Date.from(statObjectResponse.lastModified().toInstant()); + } + progressAware.onProgress(Progress.completed(UploadState.upload(file))); - return S3CloudNodeFactory.file(file.getParent(), file.getName(), Optional.of(statObjectResponse.size()), Optional.of(Date.from(statObjectResponse.lastModified().toInstant()))); + return S3CloudNodeFactory.file(file.getParent(), file.getName(), Optional.of(size), Optional.of(lastModified)); } catch (Exception ex) { handleApiError(ex, file.getPath()); }