public async Task <ObjectStorageFrontendUploadArguments> GetUploadArgumentsAsync( string path, bool everyone = false, int?contentLength = null, string?contentType = null, CancellationToken ct = default) { var now = DateTimeOffset.UtcNow; var date = $"{now:yyyyMMdd}"; var timestamp = $"{now:yyyyMMddTHHmmssZ}"; var uri = await GetUrlAsync(string.Empty, true, ct); var arguments = new ObjectStorageFrontendUploadArguments { Action = uri, Data = { ["key"] = path, ["acl"] = everyone ? "public-read" : "private", ["x-amz-algorithm"] = "AWS4-HMAC-SHA256", ["x-amz-credential"] = $"{Options.AccessKey}/{date}/{Options.Region}/s3/aws4_request", ["x-amz-date"] = timestamp } }; arguments.Data["policy"] = @$ "{{ " "expiration" ": " "{ now.AddMinutes(30) :yyyy-MM-ddTHH:mm:ss.fffZ}" ", " "conditions" ": [
public async Task <ObjectStorageFrontendUploadArguments> GetUploadArgumentsAsync( string path, bool everyone = false, int?contentLength = null, string?contentType = null, CancellationToken ct = default) { var now = DateTimeOffset.UtcNow; var expiration = now.AddSeconds(1800); var keyTime = $"{now.ToUnixTimeSeconds()};{expiration.ToUnixTimeSeconds()}"; var uri = await GetUrlAsync(string.Empty, true, ct); var arguments = new ObjectStorageFrontendUploadArguments { Action = uri, Data = { ["key"] = path, ["acl"] = everyone ? "public-read" : "private", ["q-sign-algorithm"] = "sha1", ["q-ak"] = Options.SecretId, ["q-key-time"] = keyTime } }; arguments.Data["policy"] = @$ "{{ " "expiration" ": " "{ expiration :yyyy-MM-ddTHH:mm:ss.fffZ}" ", " "conditions" ": [