Example #1
0
        public static UploadChunk ToEntity(this UploadChunkModel model, long uploadID)
        {
            return(new UploadChunk
            {
                ChunkKey = model.Identifier.UploadChunkKey,
                UploadID = uploadID,

                ChunkIndex = model.ChunkIndex,
                PositionFrom = model.PositionFrom,
                PositionTo = model.PositionTo,
                State = model.State,
                Success = model.Success
            });
        }
Example #2
0
        public async Task <UploadContextModel> UploadChunkAsync(
            UploadContextModel uploadContext,
            long from,
            long to,
            Stream inputStream,
            int chunkIndex,
            CancellationToken cancellationToken = default(CancellationToken)
            )
        {
            var uploadStateToken = UploadTokenModel.Parse(uploadContext.UploadToken);

            var fileLocator = await FileStore.FileLocatorGetAsync(uploadStateToken.Identifier);

            var uploadChunk = new UploadChunkModel
            {
                Identifier   = new UploadChunkIdentifier(uploadStateToken.Identifier, fileLocator + '.' + chunkIndex.ToString()),
                ChunkIndex   = chunkIndex,
                PositionFrom = from,
                PositionTo   = to
            };

            uploadContext.SequentialState = await BackendClient.UploadChunkAsync(
                await LoadConfigurationAsync(uploadStateToken.Identifier as OrganizationIdentifier),
                uploadStateToken.Identifier.UploadKey,
                fileLocator,
                uploadChunk.Identifier.UploadChunkKey,
                chunkIndex,
                uploadContext.TotalChunks,
                uploadContext.SequentialState,
                uploadChunk.PositionFrom,
                uploadChunk.PositionTo,
                uploadContext.FileLength,
                inputStream,
                cancellationToken
                );

            uploadChunk.State   = uploadContext.SequentialState;
            uploadChunk.Success = true;

            await UploadChunkStore.InsertAsync(uploadChunk);

            return(uploadContext);
        }