Initial commit - Common.RCL
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
@inject HttpClient Http
|
||||
|
||||
|
||||
|
||||
<div>
|
||||
@if (!string.IsNullOrEmpty(Image))
|
||||
{
|
||||
<div>
|
||||
<img src="@Image" />
|
||||
</div>
|
||||
<button @onclick="RemovePhoto" class="btn btn-primary">Remove</button>
|
||||
|
||||
}
|
||||
|
||||
<InputFile OnChange="FileChanged" Accept="@Accept"></InputFile>
|
||||
</div>
|
||||
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string? Image { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string? UploadLink { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string? Accept { get; set; }
|
||||
|
||||
|
||||
|
||||
IBrowserFile selectedFile;
|
||||
|
||||
private CancellationTokenSource? _cancellationTokenSource;
|
||||
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void RemovePhoto()
|
||||
{
|
||||
Image = "";
|
||||
selectedFile = null;
|
||||
}
|
||||
|
||||
|
||||
async Task FileChanged(InputFileChangeEventArgs e)
|
||||
{
|
||||
selectedFile = e.File;
|
||||
await GenerateBase64Preview(selectedFile);
|
||||
}
|
||||
|
||||
|
||||
public async Task<string> UploadFile()
|
||||
{
|
||||
var multipartContent = new MultipartFormDataContent();
|
||||
if (selectedFile != null)
|
||||
{
|
||||
var fileContent = new StreamContent(selectedFile.OpenReadStream());
|
||||
|
||||
fileContent.Headers.ContentType = new MediaTypeHeaderValue(selectedFile.ContentType);
|
||||
|
||||
multipartContent.Add(fileContent, "file", selectedFile.Name);
|
||||
|
||||
var response = await Http.PostAsync(UploadLink, multipartContent);
|
||||
|
||||
return await response.Content.ReadFromJsonAsync<string>();
|
||||
@* new ProgressMessageHandler(progress =>
|
||||
{
|
||||
_uploadProgress = progress;
|
||||
StateHasChanged();
|
||||
}) *@
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
private async Task GenerateBase64Preview(IBrowserFile file)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Resize image for preview (optional)
|
||||
var resizedImage = await file.RequestImageFileAsync(
|
||||
file.ContentType,
|
||||
maxWidth: 800,
|
||||
maxHeight: 800);
|
||||
|
||||
// Convert to base64
|
||||
using var stream = resizedImage.OpenReadStream(maxAllowedSize: file.Size);
|
||||
using var memoryStream = new MemoryStream();
|
||||
await stream.CopyToAsync(memoryStream);
|
||||
Image = $"data:{file.ContentType};base64,{Convert.ToBase64String(memoryStream.ToArray())}";
|
||||
@* ImageContentType = file.ContentType; *@
|
||||
StateHasChanged();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Error generating preview: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user