S3 optional checksum

This commit is contained in:
Kieran 2022-07-26 14:01:14 +01:00
parent ab917b0413
commit 81f9516f68
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
2 changed files with 9 additions and 5 deletions

View File

@ -121,6 +121,7 @@ namespace VoidCat.Model
public string? Region { get; init; } public string? Region { get; init; }
public string? BucketName { get; init; } = "void-cat"; public string? BucketName { get; init; } = "void-cat";
public bool Direct { get; init; } public bool Direct { get; init; }
public bool SendChecksum { get; init; } = true;
} }
public sealed class VirusScannerSettings public sealed class VirusScannerSettings

View File

@ -40,8 +40,9 @@ public class S3FileStore : StreamFileStore, IFileStore
ContentType = "application/octet-stream", ContentType = "application/octet-stream",
AutoResetStreamPosition = false, AutoResetStreamPosition = false,
AutoCloseStream = false, AutoCloseStream = false,
ChecksumAlgorithm = ChecksumAlgorithm.SHA256, ChecksumAlgorithm = _config.SendChecksum ? ChecksumAlgorithm.SHA256 : null,
ChecksumSHA256 = payload.Meta.Digest != default ? Convert.ToBase64String(payload.Meta.Digest!.FromHex()) : null, ChecksumSHA256 = payload.Meta.Digest != default && _config.SendChecksum ?
Convert.ToBase64String(payload.Meta.Digest!.FromHex()) : null,
Headers = Headers =
{ {
ContentLength = (long)payload.Meta.Size ContentLength = (long)payload.Meta.Size
@ -174,7 +175,7 @@ public class S3FileStore : StreamFileStore, IFileStore
BucketName = _config.BucketName, BucketName = _config.BucketName,
Key = payload.Id.ToString(), Key = payload.Id.ToString(),
ContentType = "application/octet-stream", ContentType = "application/octet-stream",
ChecksumAlgorithm = ChecksumAlgorithm.SHA256 ChecksumAlgorithm = _config.SendChecksum ? ChecksumAlgorithm.SHA256 : null
}; };
var mStartResult = await _client.InitiateMultipartUploadAsync(mStart, cts); var mStartResult = await _client.InitiateMultipartUploadAsync(mStart, cts);
@ -193,7 +194,7 @@ public class S3FileStore : StreamFileStore, IFileStore
fsTmp.Seek(0, SeekOrigin.Begin); fsTmp.Seek(0, SeekOrigin.Begin);
var segmentLength = (ulong)fsTmp.Length; var segmentLength = (ulong)fsTmp.Length;
var mbody = new UploadPartRequest() var mBody = new UploadPartRequest()
{ {
UploadId = uploadId, UploadId = uploadId,
BucketName = _config.BucketName, BucketName = _config.BucketName,
@ -202,7 +203,7 @@ public class S3FileStore : StreamFileStore, IFileStore
InputStream = fsTmp InputStream = fsTmp
}; };
var bodyResponse = await _client.UploadPartAsync(mbody, cts); var bodyResponse = await _client.UploadPartAsync(mBody, cts);
if (bodyResponse.HttpStatusCode != HttpStatusCode.OK) if (bodyResponse.HttpStatusCode != HttpStatusCode.OK)
{ {
await _client.AbortMultipartUploadAsync(new() await _client.AbortMultipartUploadAsync(new()
@ -224,6 +225,8 @@ public class S3FileStore : StreamFileStore, IFileStore
BucketName = _config.BucketName, BucketName = _config.BucketName,
Key = payload.Id.ToString(), Key = payload.Id.ToString(),
UploadId = uploadId, UploadId = uploadId,
ChecksumSHA256 = payload.Meta.Digest != default && _config.SendChecksum ?
Convert.ToBase64String(payload.Meta.Digest!.FromHex()) : null,
PartETags = parts.Select(a => PartETags = parts.Select(a =>
{ {
var pSplit = a.Split('|'); var pSplit = a.Split('|');