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]),
Exemple #2
0
        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]);