#blazor #blazor-server-side
#blazor #blazor-на стороне сервера
Вопрос:
Привет, я использую компонент InputFile в Blazor Server (.NET 6), он работает как шарм в настольных браузерах, но в мобильных устройствах он просто не работает!
вот код:
<div class="col-md-12">
<label class="form-label">
@Localizer["pet-information-photograph"]
<button type="button" class="btn btn-outline-modal f-15 rounded-circle font-weight-bold white btn-sm" @onclick="@(() => ModalPetPhotograph())">?</button>
</label>
<InputFile class="form-control" OnChange="ProcessPhotographs" accept=".png,.pdf" />
<small>@Localizer["page-rus-petInformation-fileValidateSize"]</small>
</div>
и метод:
async Task ProcessPhotographs(InputFileChangeEventArgs e)
{
photographBase64 = string.Empty;
if (e.FileCount > 0)
{
foreach (var img in e.GetMultipleFiles(1))
{
var arrbytes = new byte[img.Size];
try
{
if (img.Size < 1024000 amp;amp; (img.ContentType.Contains("png") || img.ContentType.Contains("jpg") || img.ContentType.Contains("pdf")))
{
await img.OpenReadStream(1024000).ReadAsync(arrbytes);
photographBase64 = $"data:{img.ContentType};base64,{Convert.ToBase64String(arrbytes)}";
}
else
{
ToastService.ShowWarning(Localizer["page-petInformation-fileValidateSize"], Localizer["toast-warning"]);
isLoading = false;
return;
}
}
catch (Exception ex)
{
logger.LogError(ex, ex.Message);
}
}
}
else
{
ToastService.ShowWarning(Localizer["msg-toast-photograph"], Localizer["rus-toast-warning"]);
isLoading = false;
return;
}
additionalPet.Photograph = photographBase64;
}
Есть идеи, как заставить его работать на мобильных устройствах?
Комментарии:
1. Проверьте этот код — это компонент из моего приложения, я разработал его для загрузки изображений на сервер blazor. Использует кнопки MudBlazor, но в данном случае это не должно иметь значения для вас. Он также работает на мобильных устройствах.
Ответ №1:
Я обнаружил проблему, оказывается, что способ, которым я читал файл, вызывал проблему, что после многих попыток мы изобразили ошибочный код и заменили его для этого:
using (var ms = new System.IO.MemoryStream())
{
await img.OpenReadStream(1024000).CopyToAsync(ms);
var arrbytes = ms.ToArray();