Good day,
I trust you well, please assist on the below, I have a secured mailer project built in blazer, and I am implementing logic to accommodate different file types by adding an additional encryption library, but problem seems to be related to the EventCallback.FromDelegate(OnChanged) syntax which I have been trying to fix with no success, please see below
<code> <Field Horizontal Padding="Padding.Is1">
<FieldLabel ColumnSize="ColumnSize.Is2">Document:</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is10">
<Field>
<FileEdit @ref="fileEdit" Placeholder="Upload pdf or xlsx files that are not more than 5MB each..." AutoReset="false" Multiple Changed="EventCallback<ChangeEventArgs>.FromDelegate(OnChanged)" Filter=".pdf, .xlsx" MaxFileSize="5000000" />
@if (EmailMessageDetails?.Attachments?.Any() == true)
{
<ListGroup class="list-group-item">
@foreach (var attachment in EmailMessageDetails.Attachments)
{
<ListGroupItem class="list-group-item">
<i class="fa-solid fa-circle-check icon-color"></i> @attachment.FileName attached...
</ListGroupItem>
}
</ListGroup>
}
</Field>
</FieldBody>
</Field>
</code>
<code> <Field Horizontal Padding="Padding.Is1">
<FieldLabel ColumnSize="ColumnSize.Is2">Document:</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is10">
<Field>
<FileEdit @ref="fileEdit" Placeholder="Upload pdf or xlsx files that are not more than 5MB each..." AutoReset="false" Multiple Changed="EventCallback<ChangeEventArgs>.FromDelegate(OnChanged)" Filter=".pdf, .xlsx" MaxFileSize="5000000" />
@if (EmailMessageDetails?.Attachments?.Any() == true)
{
<ListGroup class="list-group-item">
@foreach (var attachment in EmailMessageDetails.Attachments)
{
<ListGroupItem class="list-group-item">
<i class="fa-solid fa-circle-check icon-color"></i> @attachment.FileName attached...
</ListGroupItem>
}
</ListGroup>
}
</Field>
</FieldBody>
</Field>
</code>
<Field Horizontal Padding="Padding.Is1">
<FieldLabel ColumnSize="ColumnSize.Is2">Document:</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is10">
<Field>
<FileEdit @ref="fileEdit" Placeholder="Upload pdf or xlsx files that are not more than 5MB each..." AutoReset="false" Multiple Changed="EventCallback<ChangeEventArgs>.FromDelegate(OnChanged)" Filter=".pdf, .xlsx" MaxFileSize="5000000" />
@if (EmailMessageDetails?.Attachments?.Any() == true)
{
<ListGroup class="list-group-item">
@foreach (var attachment in EmailMessageDetails.Attachments)
{
<ListGroupItem class="list-group-item">
<i class="fa-solid fa-circle-check icon-color"></i> @attachment.FileName attached...
</ListGroupItem>
}
</ListGroup>
}
</Field>
</FieldBody>
</Field>
I also tried to correcting the correspondence of the partial class like below, just gives me more errors please help,
<code>private async Task OnChanged(FileChangedEventArgs e)
{
foreach (var file in e.Files)
{
using var stream = file.OpenReadStream();
var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
EmailMessageDetails.Attachments.Add(new Attachment
{
FileName = file.Name,
FileContent = memoryStream.ToArray()
});
}
StateHasChanged();
}
private async Task OnSave(SecureMailViewModel viewModel, bool save)
{
_isSending = true;
if (_secureMailValidationsRef != null && _secureMailValidationsRef.ValidateAll())
{
await SecureMailHepler.SaveOrSendEmail(viewModel, EmailMessageDetails, save);
}
_isSending = false;
}
private async Task OnSaveAndSend(SecureMailViewModel viewModel)
{
await OnSave(viewModel, false);
}
private void BackToList()
{
NavigationManager.NavigateTo("/securemail-list");
}
}
}
</code>
<code>private async Task OnChanged(FileChangedEventArgs e)
{
foreach (var file in e.Files)
{
using var stream = file.OpenReadStream();
var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
EmailMessageDetails.Attachments.Add(new Attachment
{
FileName = file.Name,
FileContent = memoryStream.ToArray()
});
}
StateHasChanged();
}
private async Task OnSave(SecureMailViewModel viewModel, bool save)
{
_isSending = true;
if (_secureMailValidationsRef != null && _secureMailValidationsRef.ValidateAll())
{
await SecureMailHepler.SaveOrSendEmail(viewModel, EmailMessageDetails, save);
}
_isSending = false;
}
private async Task OnSaveAndSend(SecureMailViewModel viewModel)
{
await OnSave(viewModel, false);
}
private void BackToList()
{
NavigationManager.NavigateTo("/securemail-list");
}
}
}
</code>
private async Task OnChanged(FileChangedEventArgs e)
{
foreach (var file in e.Files)
{
using var stream = file.OpenReadStream();
var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
EmailMessageDetails.Attachments.Add(new Attachment
{
FileName = file.Name,
FileContent = memoryStream.ToArray()
});
}
StateHasChanged();
}
private async Task OnSave(SecureMailViewModel viewModel, bool save)
{
_isSending = true;
if (_secureMailValidationsRef != null && _secureMailValidationsRef.ValidateAll())
{
await SecureMailHepler.SaveOrSendEmail(viewModel, EmailMessageDetails, save);
}
_isSending = false;
}
private async Task OnSaveAndSend(SecureMailViewModel viewModel)
{
await OnSave(viewModel, false);
}
private void BackToList()
{
NavigationManager.NavigateTo("/securemail-list");
}
}
}
Thank you
I updated the partial class, to resolve the event call back from:
<code> public async Task OnChanged(FileChangedEventArgs e, SpreadsheetDocumentType spreadsheetDocumentType)
{
try
{
foreach (var file in e.Files.Select((value, i) => new { i, value }))
{
using (MemoryStream ms = new MemoryStream())
{
await file.value.OpenReadStream(long.MaxValue).CopyToAsync(ms);
if (file.value.Type.Contains("pdf", StringComparison.OrdinalIgnoreCase))
{
await EncryptPdf(ms, file.value);
var fileStream = new FileStream($"{_folderToWriteTo}Protected_doc_{file.value.Name}", FileMode.Open, FileAccess.Read, FileShare.Read);
streams.Add(fileStream);
}
else if (file.value.Type.Contains("xlsx", StringComparison.OrdinalIgnoreCase))
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(ms, true))
{
await EncryptPdf(ms, file.value);
var fileStream = new FileStream($"{_folderToWriteTo}Protected_doc_{file.value.Name}", FileMode.Open, FileAccess.Read, FileShare.Read);
streams.Add(fileStream);
}
}
{
_toastService?.ShowWarning("Only PDF and XLSX files are supported.");
await fileEdit.Reset().AsTask();
return;
//var memStream = new MemoryStream();
//ms.Position = 0;
//await ms.CopyToAsync(memStream);
//streams.Add(memStream);
}
var formFie = new FormFile(streams[file.i], 0, streams[file.i].Length, file.value.Type, file.value.Name)
{
Headers = new HeaderDictionary(),
ContentType = file.value.Type
};
EmailMessageDetails.Attachments.Add(formFie);
}
}
}
catch (Exception exc)
{
_toastService?.ShowError($"An error occured while processing your request");
}
</code>
<code> public async Task OnChanged(FileChangedEventArgs e, SpreadsheetDocumentType spreadsheetDocumentType)
{
try
{
foreach (var file in e.Files.Select((value, i) => new { i, value }))
{
using (MemoryStream ms = new MemoryStream())
{
await file.value.OpenReadStream(long.MaxValue).CopyToAsync(ms);
if (file.value.Type.Contains("pdf", StringComparison.OrdinalIgnoreCase))
{
await EncryptPdf(ms, file.value);
var fileStream = new FileStream($"{_folderToWriteTo}Protected_doc_{file.value.Name}", FileMode.Open, FileAccess.Read, FileShare.Read);
streams.Add(fileStream);
}
else if (file.value.Type.Contains("xlsx", StringComparison.OrdinalIgnoreCase))
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(ms, true))
{
await EncryptPdf(ms, file.value);
var fileStream = new FileStream($"{_folderToWriteTo}Protected_doc_{file.value.Name}", FileMode.Open, FileAccess.Read, FileShare.Read);
streams.Add(fileStream);
}
}
{
_toastService?.ShowWarning("Only PDF and XLSX files are supported.");
await fileEdit.Reset().AsTask();
return;
//var memStream = new MemoryStream();
//ms.Position = 0;
//await ms.CopyToAsync(memStream);
//streams.Add(memStream);
}
var formFie = new FormFile(streams[file.i], 0, streams[file.i].Length, file.value.Type, file.value.Name)
{
Headers = new HeaderDictionary(),
ContentType = file.value.Type
};
EmailMessageDetails.Attachments.Add(formFie);
}
}
}
catch (Exception exc)
{
_toastService?.ShowError($"An error occured while processing your request");
}
</code>
public async Task OnChanged(FileChangedEventArgs e, SpreadsheetDocumentType spreadsheetDocumentType)
{
try
{
foreach (var file in e.Files.Select((value, i) => new { i, value }))
{
using (MemoryStream ms = new MemoryStream())
{
await file.value.OpenReadStream(long.MaxValue).CopyToAsync(ms);
if (file.value.Type.Contains("pdf", StringComparison.OrdinalIgnoreCase))
{
await EncryptPdf(ms, file.value);
var fileStream = new FileStream($"{_folderToWriteTo}Protected_doc_{file.value.Name}", FileMode.Open, FileAccess.Read, FileShare.Read);
streams.Add(fileStream);
}
else if (file.value.Type.Contains("xlsx", StringComparison.OrdinalIgnoreCase))
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(ms, true))
{
await EncryptPdf(ms, file.value);
var fileStream = new FileStream($"{_folderToWriteTo}Protected_doc_{file.value.Name}", FileMode.Open, FileAccess.Read, FileShare.Read);
streams.Add(fileStream);
}
}
{
_toastService?.ShowWarning("Only PDF and XLSX files are supported.");
await fileEdit.Reset().AsTask();
return;
//var memStream = new MemoryStream();
//ms.Position = 0;
//await ms.CopyToAsync(memStream);
//streams.Add(memStream);
}
var formFie = new FormFile(streams[file.i], 0, streams[file.i].Length, file.value.Type, file.value.Name)
{
Headers = new HeaderDictionary(),
ContentType = file.value.Type
};
EmailMessageDetails.Attachments.Add(formFie);
}
}
}
catch (Exception exc)
{
_toastService?.ShowError($"An error occured while processing your request");
}
To:
<code> private async Task OnChanged(FileChangedEventArgs e)
{
foreach (var file in e.Files)
{
using var stream = file.OpenReadStream();
var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
EmailMessageDetails.Attachments.Add(new Attachment
{
FileName = file.Name,
FileContent = memoryStream.ToArray()
});
}
StateHasChanged();
}
private async Task OnSave(SecureMailViewModel viewModel, bool save)
{
_isSending = true;
if (_secureMailValidationsRef != null && _secureMailValidationsRef.ValidateAll())
{
await SecureMailHepler.SaveOrSendEmail(viewModel, EmailMessageDetails, save);
}
_isSending = false;
}
private async Task OnSaveAndSend(SecureMailViewModel viewModel)
{
await OnSave(viewModel, false);
}
private void BackToList()
{
NavigationManager.NavigateTo("/securemail-list");
}
}
}
</code>
<code> private async Task OnChanged(FileChangedEventArgs e)
{
foreach (var file in e.Files)
{
using var stream = file.OpenReadStream();
var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
EmailMessageDetails.Attachments.Add(new Attachment
{
FileName = file.Name,
FileContent = memoryStream.ToArray()
});
}
StateHasChanged();
}
private async Task OnSave(SecureMailViewModel viewModel, bool save)
{
_isSending = true;
if (_secureMailValidationsRef != null && _secureMailValidationsRef.ValidateAll())
{
await SecureMailHepler.SaveOrSendEmail(viewModel, EmailMessageDetails, save);
}
_isSending = false;
}
private async Task OnSaveAndSend(SecureMailViewModel viewModel)
{
await OnSave(viewModel, false);
}
private void BackToList()
{
NavigationManager.NavigateTo("/securemail-list");
}
}
}
</code>
private async Task OnChanged(FileChangedEventArgs e)
{
foreach (var file in e.Files)
{
using var stream = file.OpenReadStream();
var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
EmailMessageDetails.Attachments.Add(new Attachment
{
FileName = file.Name,
FileContent = memoryStream.ToArray()
});
}
StateHasChanged();
}
private async Task OnSave(SecureMailViewModel viewModel, bool save)
{
_isSending = true;
if (_secureMailValidationsRef != null && _secureMailValidationsRef.ValidateAll())
{
await SecureMailHepler.SaveOrSendEmail(viewModel, EmailMessageDetails, save);
}
_isSending = false;
}
private async Task OnSaveAndSend(SecureMailViewModel viewModel)
{
await OnSave(viewModel, false);
}
private void BackToList()
{
NavigationManager.NavigateTo("/securemail-list");
}
}
}