Files
Common.RCL/Common/SingleFileUpload.razor

104 lines
2.4 KiB
Plaintext

@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}");
}
}
}