104 lines
2.4 KiB
Plaintext
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}");
|
|
}
|
|
}
|
|
|
|
} |