private static async Task SendFileMetadata(string fileName, AsyncClientStreamingCall <StartUploadRequest, StartUploadResponse> call) { var fileMetadataRequest = new StartUploadRequest() { FileMetadata = new FileMetadata { FileName = fileName } }; await call.RequestStream.WriteAsync(fileMetadataRequest); }
private static async Task SendFilePayload(string sourceFile, AsyncClientStreamingCall <StartUploadRequest, StartUploadResponse> call, CancellationToken cancellationToken) { var chunksize = 0x1F400; byte[] chunk = new byte[chunksize]; Memory <byte> memory = new Memory <byte>(chunk); await using (FileStream fileToUpload = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read, chunksize)) { int bytesRead = 0; while ((bytesRead = await fileToUpload.ReadAsync(memory, cancellationToken)) > 0) { var filePayloadRequest = new StartUploadRequest() { FilePayload = new FilePayload { Chunk = Google.Protobuf.ByteString.CopyFrom(memory.Slice(0, bytesRead).Span) } }; await call.RequestStream.WriteAsync(filePayloadRequest); } } }