public async Task <ObjectID> PutObject(Header header, Stream reader, CallOptions options = null, CancellationToken context = default) { if (header is null) { throw new ArgumentNullException(nameof(header)); } var opts = DefaultCallOptions.ApplyCustomOptions(options); CheckOptions(opts); var req = new PutRequest { Body = new() }; var meta = opts.GetRequestMetaHeader(); req.MetaHeader = meta; var init = new PutRequest.Types.Body.Types.Init { Header = header, }; req.Body.Init = init; opts.Key.Sign(req); using var stream = await PutObject(req, context : context); var block = new byte[Object.Object.ChunkSize]; var count = reader.Read(block, 0, Object.Object.ChunkSize); while (count > 0) { var chunk_body = new PutRequest.Types.Body { Chunk = ByteString.CopyFrom(block[..count]),
public async Task <ObjectID> PutObject(CancellationToken context, PutObjectParams param, CallOptions options = null) { var object_client = new ObjectService.ObjectServiceClient(channel); var obj = param.Object; var call = object_client.Put(cancellationToken: context); var opts = DefaultCallOptions.ApplyCustomOptions(options); var req_stream = call.RequestStream; var req = new PutRequest(); var body = new PutRequest.Types.Body(); req.Body = body; var address = new Address { ContainerId = obj.Header.ContainerId, ObjectId = obj.ObjectId, }; var meta = opts.GetRequestMetaHeader(); AttachObjectSessionToken(opts, meta, address, ObjectSessionContext.Types.Verb.Put); req.MetaHeader = meta; var init = new PutRequest.Types.Body.Types.Init { ObjectId = obj.ObjectId, Signature = obj.Signature, Header = obj.Header, }; req.Body.Init = init; req.SignRequest(key); await req_stream.WriteAsync(req); int offset = 0; while (offset < obj.Payload.Length) { var end = offset + Object.Object.ChunkSize > obj.Payload.Length ? obj.Payload.Length : offset + Object.Object.ChunkSize; var chunk = ByteString.CopyFrom(obj.Payload.ToByteArray()[offset..end]);