Ejemplo n.º 1
0
        public async Task UploadFilePart(MultipartUploadSession uploadSession, Stream inputStream, int templateCode)
        {
            if (SessionDescriptor.IsSessionExpired(uploadSession.SessionExpiresAt))
            {
                throw new SessionExpiredException(uploadSession.SessionId, uploadSession.SessionExpiresAt);
            }

            if (uploadSession.NextPartNumber == 1)
            {
                var sessionDescriptor = uploadSession.SessionDescriptor;
                var elementDescriptor = uploadSession.ElementDescriptor;
                EnsureFileHeaderIsValid(
                    templateCode,
                    uploadSession.ElementDescriptor.Type,
                    elementDescriptor.Constraints.For(sessionDescriptor.Language),
                    inputStream,
                    uploadSession.UploadedFileMetadata);
            }

            var key = uploadSession.SessionId.AsS3ObjectKey(uploadSession.FileKey);

            inputStream.Position = 0;

            var response = await _cephS3Client.UploadPartAsync(
                new UploadPartRequest
            {
                BucketName  = _filesBucketName,
                Key         = key,
                UploadId    = uploadSession.UploadId,
                InputStream = inputStream,
                PartNumber  = uploadSession.NextPartNumber
            });

            uploadSession.AddPart(response.ETag);
        }