/// <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); }
/// <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); }
/// <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); }