Esempio n. 1
0
        /// <summary>
        /// Persist the uploaded file data to db
        /// </summary>
        private async Task <gFileItem> PersistMetaData(FileCompleteContext ctx)
        {
            var gUserResponse = await _fileMngClient.GetUserAsync(new gUserRequest());

            if (gUserResponse == null)
            {
                _logger.LogError("Unknown error occured while requesting user info");
                ctx.HttpContext.Response.StatusCode = 400;
                return(null);
            }
            if (gUserResponse.Status.Status != Protos.RequestStatus.Success)
            {
                _logger.LogError(gUserResponse.Status.Message);
                ctx.HttpContext.Response.StatusCode = 400;
                return(null);
            }

            ITusFile file     = await((ITusReadableStore)ctx.Store).GetFileAsync(ctx.FileId, ctx.CancellationToken);
            var      metadata = await file.GetMetadataAsync(ctx.CancellationToken);

            gFileItem fileitem = new gFileItem()
            {
                Id       = Helpers.GenerateUniqueId(),
                TusId    = ctx.FileId,
                UserId   = gUserResponse.User.Id,
                Size     = uint.Parse(new FileInfo(Path.Combine(_uploadOpts.CurrentValue.UploadPath, file.Id)).Length.ToString()),
                Name     = metadata["name"].GetString(Encoding.UTF8),
                MimeType = metadata["contentType"].GetString(Encoding.UTF8),
                // file with no folderid is placed in the virtual root folder
                FolderId = metadata["folderId"].GetString(Encoding.UTF8) == "root"
                                                                                ? null
                                                                                : metadata["folderId"].GetString(Encoding.UTF8),
                Extension       = Helpers.GetFileExtension(metadata["contentType"].GetString(Encoding.UTF8)) ?? string.Empty,
                StorageServerId = metadata["serverId"].GetString(Encoding.UTF8),
                CreatedAt       = Timestamp.FromDateTime(DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc)),
                LastModified    = Timestamp.FromDateTime(DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc)),
                Status          = Protos.ItemStatus.Visible
            };

            // send the uploaded file info to the main app
            gFileItemResponse response = await _fileMngClient.SaveFileAsync(new gFileItemRequest()
            {
                FileItem = fileitem
            });

            if (response == null)
            {
                _logger.LogError("No response has been received from the server.", ErrorOrigin.Server);
                return(null);
            }
            if (response.Status.Status != Protos.RequestStatus.Success)
            {
                _logger.LogError("An error has been returned from server call: " + response.Status.Message);
                return(null);
            }
            return(response.FileItem);
        }
Esempio n. 2
0
        /// <summary>
        /// Get file info by id
        /// </summary>
        public async override Task <gFileItemResponse> GetFileById(gFileRequest request, ServerCallContext context)
        {
            var response = new gFileItemResponse();
            var result   = await _mediatr.Send(new GetFileServerInfoQuery(request.Fileid));

            response.Status = result.Convert();
            if (result.State == OperationState.Success)
            {
                response.FileItem = result.File.Convert();
            }

            return(response);
        }
Esempio n. 3
0
        /// <summary>
        /// Save the new uploaded file to db
        /// </summary>
        public override async Task <gFileItemResponse> SaveFile(gFileItemRequest request, ServerCallContext context)
        {
            var response = new gFileItemResponse();
            var result   = await _mediatr.Send(new SaveFileCommand(request.FileItem.Convert()));

            response.Status = result.Convert();
            if (result.State == OperationState.Success)
            {
                response.FileItem = result.File.Convert();
            }

            return(response);
        }